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