2016-12-14 86 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> 

我希望這將有助於其他一些開發商:)