2012-02-20 93 views
1

我有一个风格的触发内datatrigger类似以下如何将样式绑定到任何datacontext具有样式元素的属性?

<Style TargetType="DataGridCell" x:Key="ChangeAnimation" > 
    <Style.Triggers> 
     <DataTrigger Binding="{Binding Path=APropertyOfTheDataGridCellContext Bind DataContext}" Value="True" > 
      ... 
     </DataTrigger> 
    </Style.Triggers> 
</Style> 

我将这种风格应用到使用属性CellStyle一些DataGridColumns。我想要的是将样式的DataTrigger绑定到单元格的datacontext的属性,这样我就可以在所有需要的列上使用此样式,而不必为每个列创建新的样式。这可能吗?

在此先感谢。

编辑:为了说明,DataGrid的DataContext是一个ViewModel,它具有一个名为Rows的属性,而行的名为Cells的属性名为Blink。我想引用属性的风格里面是这样的:

<DataGrid.Resources> 
<Style TargetType="DataGridCell" x:Key="ChangeAnimation" > 
    <Style.Triggers> 
     <DataTrigger Binding="{Binding Path=Blink}" Value="True" > 
      ... 
     </DataTrigger> 
    </Style.Triggers> 
</Style> 
</DataGrid.Resources> 

这给了我一个错误的AWS DataGridResources的datacontext是包含行没有细胞一个一个。我如何从样式中引用DataGridCell DataContext?

回答

5

删除x:Key属性,然后将应用于所有列。

<Style TargetType="{x:Type DataGridCell}"> 
    <Style.Triggers>   
     <DataTrigger Binding="{Binding Path=DataContext.MyProperty,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type DataGridCell}}}" Value="True" />      
    </Style.Triggers> 
</Style> 

如果你有2个DataGrid中,那么你应该保持这种风格,你要修改的DataGrid的Resources标签...

如果的RelativeSource不工作我宁愿改变的模板列由触发器才达到类似的行为

写触发器的列

<WpfToolkit:DataGridTemplateColumn MinWidth="50" 
            MaxWidth="80" 
            Header="MyHeader" 
            IsReadOnly="True"> 
    <WpfToolkit:DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <DataTemplate.Resources> 
       <DataTemplate x:Key="normalTemplate" /> 
       <DataTemplate x:Key="ChangeTempalte"> 
        <!-Your Controls-> 
       </DataTemplate> 
      </DataTemplate.Resources> 
      <ContentPresenter x:Name="chnagedField" 
           Content="{Binding}" 
           ContentTemplate="{StaticResource ResourceKey=normalTemplate}" /> 
      <DataTemplate.Triggers> 
       <DataTrigger Binding="{Binding Path=MyProperty}" Value="True"> 
        <Setter TargetName="EditableField" Property="ContentTemplate" Value="{StaticResource ResourceKey=chnageTempalte}" /> 
       </DataTrigger> 
      </DataTemplate.Triggers> 
     </DataTemplate> 
    </WpfToolkit:DataGridTemplateColumn.CellTemplate> 
</WpfToolkit:DataGridTemplateColumn> 

这里MyPropertyDataGridRowDataContext的属性,所以你可以选择什么都嵌套属性的级别哟比较在特定行......唯一的缺点是,你必须为所有需要此

我列这样做希望它有帮助

+0

我面临的问题是我声明DataGrid资源内的样式。我可以从那里引用DataGridCell DataContext的属性吗? – 2012-02-20 10:33:02

+0

@SoMoS做yu想做些什么像这样...... se编辑答案 – Ankesh 2012-02-20 11:25:48

+0

正确,像这样的东西,但datacontext不是一个祖先,而是一个孩子。你懂我的意思吗? – 2012-02-20 11:30:47

相关问题