【发布时间】:2017-10-16 23:03:43
【问题描述】:
我想为自定义DataGrid 的DataGridCell 添加一个样式,该样式基于该DataGrid 的属性。例如,我想要一个名为 VisualizeReadOnlyCells 的 DependencyProperty,如果该属性设置为 True,我希望使用灰色背景绘制 ReadOnly 的 DataGridCell。和其他类似的事情。作为一种解决方法,我为DataGridCell 创建了两种不同的样式,并将这些样式分配给DataGrid 样式定义中DataGrid 的CellStyle 属性。但是随着属性的增加,此类样式的数量将会增加,并且代码将非常难以管理。
我目前的解决方案是:
<Style x:Key="DataGridCellNoVisualize" TargetType="DataGridCell">
- style definition
</Style>
<Style x:Key="DataGridCellVisualize" TargetType="DataGridCell">
<Style.Triggers>
<Trigger Property="IsReadOnly" Value="True">
<Setter Property="Background" Value="Gray"/>
</Trigger>
</Style.Triggers>
</Style>
<Style x:Key="DataGridStyle" TargetType="MyCustomDataGrid">
<Setter Property="CellStyle" Value="{StaticResource DataGridCellNoVisualize"/>
<Style.Triggers>
<Trigger Property="VisualizeReadOnlyCells" Value="True">
<Setter Property="CellStyle" Value="{Static Resource DataGridCellVisualize"/>
</Trigger>
</Style.Triggers>
</Style>
我想得到的是这样的:
<Style x:Key="DataGridCellUniversalStyle" TargetType="DataGridCell">
- style definition
<Style.Triggers>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsReadOnly" Value="True"/>
<Condition Property="MyParentDataGrid.VisualizeReadOnlyCells" Value="True"/>
</MultiTrigger.Conditions>
<MultiTrigger.Setters>
<Setter Property="Background" Value="Gray"/>
</MultiTrigger.Setters>
</MultiTrigger>
</Style.Triggers>
</Style>
【问题讨论】: