为什么有两种不同类型的DataGridRow高亮颜色,为什么我不能同时控制它们?

时间:2013-12-20 21:51:22

标签: c# wpf datagrid

我在WPF中有一个DataGrid,其SelectedIndex字段绑定到我的viewmodel中的相应属性。当窗口打开时,与未选择的行相比,我可以看到所选行隐约灰色阴影。如果用户单击该行,则会更改为蓝色阴影。

这是一个问题的原因是因为我似乎只能设置用户点击高亮的行的背景颜色,而不是通过编程方式更改选定的索引。我尝试过以下类型的样式,但它们仅影响单击行的背景颜色,而不影响SelectedIndex设置的样式:

示例1:

            <DataGrid.RowStyle>
                <Style TargetType="{x:Type DataGridRow}" >
                    <Style.Triggers>
                        <Trigger Property="IsSelected" Value="True">
                            <Setter Property="Background" Value="Blue" />
                        </Trigger>
                    </Style.Triggers>
                </Style>
            </DataGrid.RowStyle>

示例2:

            <DataGrid.RowStyle>
                <Style TargetType="{x:Type DataGridRow}" >
                    <Style.Resources>
                        <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Blue" />
                        <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Transparent" />
                        <SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Black" />
                        <SolidColorBrush x:Key="{x:Static SystemColors.ControlTextBrushKey}" Color="Black" />
                    </Style.Resources>
                </Style>
            </DataGrid.RowStyle>

那么,我该如何设置所选的索引高亮颜色?因为我的下一步是忽略用户点击。无论如何,这两种行选择之间的区别是什么,用户点击的类型,以及以编程方式设置selectedindex的类型?

2 个答案:

答案 0 :(得分:1)

<强>解决方案

//C#, WPF
dataGridInstance.Focus();       //make sure DataGrid is focused
dataGridInstance.SelectAll();   //select a row programmatically

这些是我用于搜索此解决方案的原始问题:

  • 为什么在WPF DataGrid中以编程方式选择行会导致 灰色高光而不是蓝色?
  • 为什么要通过代码在WPF DataGrid中选择行 与鼠标点击相比有何不同?

答案 1 :(得分:0)

有两种样式可供选择,因为选择可以是活动的也可以是非活动的(element.IsFocused == false时)。

试试这个:

   <DataGrid.RowStyle>
        <Style TargetType="{x:Type DataGridRow}" >
            <Style.Triggers>
                <Trigger Property="IsSelected" Value="True">
                    <Setter Property="Background" Value="Blue" />
                </Trigger>
                <MultiTrigger>
                    <MultiTrigger.Conditions>
                        <Condition Property="IsFocused" Value="False"/>
                        <Condition Property="IsSelected" Value="True"/>
                    </MultiTrigger.Conditions>
                    <Setter Property="Background" Value="Blue"/>
                </MultiTrigger>
            </Style.Triggers>
        </Style>
    </DataGrid.RowStyle>

然而,由于视觉上的区别是有原因的,我建议改为how focus works in WPF。例如,您可能希望在最初显示网格或更改其选择时对焦网格。