2016-12-14 118 views
2

我目前正在设计我的应用程序(WPF),并且我试图更改DatagridRowIsSelected的设计。DatagridRow IsSelected不完全工作

的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}"/> 
+0

你能还添加'DataGrid.Resources'? –

+0

尝试使用'Animation'设置'Foreground'。 – AnjumSKhan

+0

什么是“动画”? – Destunk

回答

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

这不是很好的答案,因为我需要将背景应用于DataGridRow。但设置前景到DataGridCell的事实是我需要的,谢谢 – Destunk

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> 

我希望这将有助于其他一些开发商:)