【问题标题】:WPF DataGrid AlternatingRowBackground overriding the Style DataTrigger for backgroundWPF DataGrid AlternatingRowBackground 覆盖背景的 Style DataTrigger
【发布时间】:2019-02-07 09:19:33
【问题描述】:

我有一个 DataGrid,我在其中显示多行数据。为了帮助在视觉上区分行,我为交替行添加了背景颜色。

但是,有些行包含我想吸引用户注意的非常有趣的数据,因此我使用 Style DataTrigger 突出显示这些特定行。

我的问题是交替的背景颜色优先 - 只有奇数行(无背景颜色)显示突出显示。

注意,这是一个使用 MVVM 模式的数据绑定 DataGrid(没有“代码隐藏”)。

(非常精简的)代码如下:

<DataGrid ItemsSource="{Binding FilteredTraceMessages, Mode=OneWay}" 
            AlternatingRowBackground="AliceBlue"
            .......>

    <DataGrid.Columns>
        ....
    </DataGrid.Columns>

    <DataGrid.RowStyle>
        <Style TargetType="DataGridRow">
            <Style.Triggers>
                <DataTrigger Binding="{Binding Severity}" Value="Error">
                    <Setter Property="Background" Value="LightSalmon"></Setter>
                </DataTrigger>
                <DataTrigger Binding="{Binding Severity}" Value="Warning">
                    <Setter Property="Background" Value="LemonChiffon"></Setter>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </DataGrid.RowStyle>
</DataGrid>

【问题讨论】:

    标签: wpf wpfdatagrid wpf-style


    【解决方案1】:

    您必须将Backround 设置为相同的优先级。见Dependency Property Setting Precedence List
    DataGrid 中删除AlternatingRowBackground="AliceBlue" 并将AlternationCount="2" 放在那里。然后首先添加AlternationIndex 的触发器。

    <DataGrid ItemsSource="{Binding FilteredTraceMessages, Mode=OneWay}" AlternationCount="2"
        .......>
    
        <DataGrid.Columns>
            ....
        </DataGrid.Columns>
    
        <DataGrid.RowStyle>
            <Style TargetType="DataGridRow">
                <Style.Triggers>
                    <Trigger Property="AlternationIndex" Value="1">
                        <Setter Property="Background" Value="AliceBlue"/>
                    </Trigger>
                    <DataTrigger Binding="{Binding Severity}" Value="Error">
                        <Setter Property="Background" Value="LightSalmon"></Setter>
                    </DataTrigger>
                    <DataTrigger Binding="{Binding Severity}" Value="Warning">
                        <Setter Property="Background" Value="LemonChiffon"></Setter>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </DataGrid.RowStyle>
    </DataGrid>
    

    【讨论】:

    • 感谢您提供简单直接(且正确)的答案!很有帮助。
    猜你喜欢
    • 2021-03-30
    • 1970-01-01
    • 2011-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-03
    • 1970-01-01
    • 2013-02-09
    相关资源
    最近更新 更多