簡體   English   中英

WPF DataGrid:使用觸發器更改單元格前景色

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM