繁体   English   中英

基于DataGrid属性的DataGridCell样式

[英]DataGridCell style based on DataGrid property

我想向基于该DataGrid属性的自定义DataGridDataGridCell添加样式。 例如,我想要一个名为VisualizeReadOnlyCells的DependencyProperty,并且如果该属性设置为True,则我希望使用灰色背景绘制ReadOnly的DataGridCell 和其他类似的东西。 作为一种解决方法,我为DataGridCell创建了两种不同的样式,并将这些样式分配给DataGrid样式定义中DataGridCellStyle属性。 但是随着更多的属性,此类样式的数量将会增加,并且代码将非常难以管理。

我当前的解决方案是:

<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>

如果我正确理解了您的问题,则可以使用MultiDataTrigger并绑定到DataGridCell和父DataGrid

<Style x:Key="DataGridCellUniversalStyle" TargetType="DataGridCell">
    <Style.Triggers>
        <MultiDataTrigger>
            <MultiDataTrigger.Conditions>
                <Condition Binding="{Binding IsReadOnly, RelativeSource={RelativeSource Self}}" Value="True"/>
                <Condition Binding="{Binding VisualizeReadOnlyCells, RelativeSource={RelativeSource AncestorType=local:MyCustomDataGrid}}" Value="True"/>
            </MultiDataTrigger.Conditions>
            <MultiDataTrigger.Setters>
                <Setter Property="Background" Value="Gray"/>
            </MultiDataTrigger.Setters>
        </MultiDataTrigger>
    </Style.Triggers>
</Style>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM