我在样式触发器中有一个数据触发器,如下所示
<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的属性,而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>
这给了我一个错误,因为DataGridResources的datacontext是包含Rows而不是单元格的那个。如何从样式中引用DataGridCell DataContext?
答案 0 :(得分: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个DataGrids,那么您应该将此样式保留在要修改的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>
此处MyProperty
是DataContext
DataGridRow
的属性,因此您可以选择任何级别的嵌套属性yo比较该特定行...唯一不足的是您必须为需要此
我希望它有所帮助