這是繼我以前的問題一個問題,you can find it right there造型DataGridCell正確
所以。現在,我定義的特定ElementStyle
爲每列一個DataGrid
(這只是定義了大膽&白色TextBlock
的內線 - 會過來這個問題後)
所以現在我有兩個問題
第一個問題(已解決)
當我碰巧爲我的單元格設置背景時,它會覆蓋默認樣式,並且在單元格高亮顯示時背景保持不變。風格的
一個例子:
<!-- Green template for market-related -->
<ControlTemplate x:Key="Green" TargetType="{x:Type tk:DataGridCell}">
<Grid Background="Green">
<ContentPresenter
HorizontalAlignment="Center"
VerticalAlignment="Center" />
</Grid>
</ControlTemplate>
我會自然地說這是「正常」的,因爲我設置Grid
的背景爲綠色。因此我試過這樣:
<!-- Light green template for sophis-related -->
<ControlTemplate x:Key="LightGreen" TargetType="{x:Type tk:DataGridCell}">
<Grid Background="LightGreen">
<Grid.Resources>
<Style TargetType="{x:Type Grid}">
<Style.Triggers>
<DataTrigger Binding="{Binding IsSelected, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type tk:DataGridCell}},
Converter={StaticResource DebugConverter}}" Value="True">
<Setter Property="Grid.Background" Value="#FF3774FF" />
</DataTrigger>
</Style.Triggers>
</Style>
</Grid.Resources>
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" />
</Grid>
</ControlTemplate>
這也行不通。正如你可以看到我把DebugConverter這樣我就可以檢查觸發實際上是所謂的,是哪種情況,但...背景不會改變(和Snoop證實了這一點......)
第三次嘗試:
<!-- Light green template for sophis-related -->
<ControlTemplate x:Key="LightGreen" TargetType="{x:Type tk:DataGridCell}">
<ControlTemplate.Resources>
<Style TargetType="{x:Type tk:DataGridCell}">
<Setter Property="Background" Value="LightGreen" />
</Style>
</ControlTemplate.Resources>
<Grid>
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" />
</Grid>
</ControlTemplate>
而且......沒有背景,將顯示(保持透明)
所以我想我在錯誤的方式在這裏工作,我想知道我該怎麼做,只是界定「未選擇」模板。 我想說我可能需要定義一種基於「經典」風格的風格,但是,我該怎麼做呢?我嘗試沒有成功添加TemplateBindings
**編輯:**解決
由於HB在他的回答,問題是從DependencyProperty的優先級來建議,這裏的解決方案:
<!-- Light green template for sophis-related -->
<ControlTemplate x:Key="LightGreen" TargetType="{x:Type tk:DataGridCell}">
<Grid>
<Grid.Resources>
<Style TargetType="{x:Type Grid}">
<Style.Triggers>
<DataTrigger Binding="{Binding IsSelected, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type tk:DataGridCell}},
Converter={StaticResource DebugConverter}}" Value="True">
<Setter Property="Grid.Background" Value="#FF316AC5" />
</DataTrigger>
<DataTrigger Binding="{Binding IsSelected, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type tk:DataGridCell}},
Converter={StaticResource DebugConverter}}" Value="False">
<Setter Property="Grid.Background" Value="LightGreen" />
</DataTrigger>
</Style.Triggers>
</Style>
</Grid.Resources>
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" />
</Grid>
</ControlTemplate>
二問題
現在,讓我們說Triggers
。
基本上,我想要做的就是定義特定Triggers
我ElementStyle
所以字體顏色爲白色,如果單元格背景爲紅色或綠色(這樣做的唯一目的是爲了有一個更好的可讀性紅色和綠色是在一個漂亮的深色背景效果有點暗,黑色的字體失敗:p)
編輯好像我不夠清楚:下面的樣式是應用於DataGrid的每一個項目,通過屬性DataGridTextColumn.ElementStyle
風格。這裏是代碼處理的是:
void VolatilityDataGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
DataGridTextColumn column = e.Column as DataGridTextColumn;
column.ElementStyle = s_boldCellStyle;
// Other stuff here...
}
這裏是我做的:
<!-- Cell style for colored matrix-->
<Style x:Key="BoldCellStyle" TargetType="{x:Type TextBlock}">
<Style.Triggers>
<DataTrigger Binding="{Binding Background, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type tk:DataGridCell}}}"
Value="Red">
<Setter Property="Foreground" Value="White" />
</DataTrigger>
<DataTrigger Binding="{Binding Background, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type tk:DataGridCell}},
Converter={StaticResource DebugConverter}}"
Value="Green">
<Setter Property="Foreground" Value="White" />
</DataTrigger>
</Style.Triggers>
<Setter Property="FontWeight" Value="Bold"/>
</Style>
而且......它不工作。奇怪的是,通過轉換器只是透明背景顏色。我絕對錯過了一些東西! 順便說一句,我也試過用經典的觸發器,也沒有成功,我在這裏使用DataTriggers
,所以我可以調試綁定值!
現在我已經遇到這方面的更多超過三天,我開始嚇壞了...希望在社區#1將節省我:)
謝謝!
編輯
好吧,更新。 我明白爲什麼我的Trigger
不起作用。實際設置的背景是Grid
,而不是DataGridCell
。因此,我沒有在那裏設置任何顏色是正常的。
但是,我跑了一些測試,發現當設置綁定時,TextBlock
還沒有任何父代(Parent
= null)。綁定到類型Grid
的RelativeSource
將綁定我...整個DataGrid
項目演示者。 我不確定現在要做什麼,因爲它似乎是從實際的TextBlock
風格,我無法達到父Grid
,因此無法解決什麼顏色,我應該顯示根據背景。 此外,我無法更改我的ControlTemplate
中的字體顏色,因爲DataGrid
希望每個列都有Style
,這會默認覆蓋模板的樣式(see my previous question and its answer) 因此...再次卡住我!
謝謝你的有用鏈接!第一個問題因爲你而解決:)關於第二個問題,這是一個爲TextBlock定義的樣式,所以我真的應該使用TextElement.Foreground嗎?我正在編輯這個問題,因爲我發現可能是什麼原因 - 這可能會帶來一個新問題,甚至更棘手:/ – Damascus
@Damascus:事實上,起初沒有父母不應該是有問題的。我仍然沒有得到**你在哪裏使用這種風格,以及它如何與其他組件交互,但是你的問題需要更多的上下文。 –
Woops,不好意思,只是更新了這個問題,風格被用作'DataGridTextColumn.ElementStyle',檢查了這個:) – Damascus