[英]WPF DataGrid: changing cell foreground color with triggers
我有一個WPF DataGrid,其中包含一些需要在其中包含藍色文本的列。 這是規范規定的,無法更改。
現在,這通常不會有問題,但是,當用戶在網格中選擇一行時,該行將以藍色突出顯示,這在所有版本的Windows中都是常見的。
這是有問題的,因為該行變得難以閱讀:
(請注意,上面的圖像來自Win10,其中選擇的藍色非常淺,但是在客戶端計算機(即Windows Server 2008)上,“選擇藍色”要暗得多,並且文本基本上不可讀)
因此,我嘗試將以下樣式應用於該特定列的單元格:
<Style TargetType="DataGridCell" x:Key="styleBlueCell">
<Style.Triggers>
<Trigger Property="IsSelected" Value="False">
<Setter Property="Foreground" Value="Blue"/>
</Trigger>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Foreground" Value="White"/>
</Trigger>
</Style.Triggers>
</Style>
這幾乎可以完美地工作...但是在一種情況下:當選擇了一行,但是DataGrid本身沒有焦點時,該行變為灰色,這使事情變得混亂:
我試圖弄亂MultiTriggers,就像這樣:
<Style TargetType="DataGridCell" x:Key="styleBlueCell2">
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding ElementName=gridAvanzamenti, Path=IsFocused}" Value="False"/>
<Condition Binding="{Binding IsSelected}" Value="True" />
</MultiDataTrigger.Conditions>
<Setter Property="Foreground" Value="Blue"/>
</MultiDataTrigger>
</Style.Triggers>
</Style>
但是無論我嘗試什么(通過元素名稱綁定,查找祖先等),我似乎都無法綁定到父級DataGrid。 有人知道怎么做嗎?
經過更多的試驗和錯誤以及Ed Plunkett的有用提示后,請參考完整的解決方案:
<Style TargetType="DataGridCell" x:Key="styleBlueCell">
<Style.Setters>
<Setter Property="Foreground" Value="Blue"/>
</Style.Setters>
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}, Path=IsKeyboardFocusWithin}" Value="True"/>
<Condition Binding="{Binding RelativeSource={RelativeSource AncestorType={x:Type DataGridRow}}, Path=IsSelected}" Value="True"/>
</MultiDataTrigger.Conditions>
<Setter Property="Foreground" Value="White"/>
</MultiDataTrigger>
</Style.Triggers>
</Style>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.