DatagridRow IsSelected不完全正常工作

时间:2016-12-14 10:13:51

标签: c# wpf xaml datagrid

我目前正在设计我的应用程序(WPF),并且我正在尝试更改IsSelected DatagridRow的设计。

XAML:

<Style TargetType="DataGridRow" BasedOn="{StaticResource {x:Type DataGridRow}}">
    <Style.Triggers>
        <Trigger Property="IsSelected" Value="True">
             <Setter Property="Foreground" Value="{StaticResource ForegroundSelectedRow}"/>
             <Setter Property="Background" Value="{StaticResource BackgroundSelectedRow}"/>
        </Trigger>
    </Style.Triggers>
</Style>

当我关注我的应用程序时,此代码正常工作,但是当我用DataGrid点击视图时,我丢失了前景(它需要另一种颜色),但背景仍然是同样的......

我不明白一个人是如何工作的,而不是另一个人......有人知道为什么吗?

编辑1:

我没有任何DataGrid.Resources。我在App.xaml中设置了我的所有风格:

<Style x:Key="DataGridStyle" TargetType="DataGrid" BasedOn="{StaticResource {x:Type DataGrid}}">
    <Setter Property="AlternationCount" Value="2"/>
    <Setter Property="AutoGenerateColumns" Value="False"/>
    <Setter Property="IsReadOnly" Value="True"/>
    <Setter Property="CanUserSortColumns" Value="True"/>
    <Setter Property="CanUserAddRows" Value="False"/>
</Style>

我将它绑定到我的DataGrid

<DataGrid ItemsSource="{Binding Collects}" Style="{StaticResource DataGridStyle}" ColumnHeaderStyle="{StaticResource DGHeaderMargin}"/>

2 个答案:

答案 0 :(得分:2)

您可以将TargedType更改为DataGridCell而不是DataGridRow(WPF 4.0)

<DataGrid.Resources>
 <Style TargetType="{x:Type dg:DataGridCell}">
    <Style.Triggers>
        <Trigger Property="dg:DataGridCell.IsSelected" Value="True">
            <Setter Property="Foreground" Value="{StaticResource ForegroundSelectedRow}"/>
            <Setter Property="Background" Value="{StaticResource BackgroundSelectedRow}"/>
        </Trigger>
    </Style.Triggers>
</Style>

解决方案2

    <DataGrid.Resources> 
        <Style TargetType="DataGridRow"> 
            <Style.Resources> 
                <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Red"/>                                  
            </Style.Resources> 
        </Style> 
   </DataGrid.Resources> 

答案 1 :(得分:1)

感谢M.Wiśnicki,我想通了!

如果您想进行正确的设计,则必须在DataGridRowDataGridCell上应用样式,如下所示:

        <Style TargetType="DataGridCell" BasedOn="{StaticResource {x:Type DataGridCell}}">
            <Style.Triggers>
                <Trigger Property="IsSelected" Value="True">
                    <Setter Property="Foreground" Value="{StaticResource ForegroundSelectedRow}"/>
                </Trigger>
            </Style.Triggers>
        </Style>

        <Style TargetType="DataGridRow" BasedOn="{StaticResource {x:Type DataGridRow}}">
            <Style.Triggers>
                <Trigger Property="IsSelected" Value="True">
                    <Setter Property="Background" Value="{StaticResource BackgroundSelectedRow}"/>
                </Trigger>
            </Style.Triggers>
        </Style>

我希望它能帮助其他开发者:)