[英]How to set DataGridTextColumn text color?
我正在嘗試更改DataGridTextColumn的顏色。
這是我正在做的事情:
<DataGridTextColumn
Header="Status"
Binding="{Binding IsActive,
Converter= {StaticResource BoolToStatusConverter}}"
Foreground="{Binding Path=IsActive,
Converter={StaticResource BoolToColorConverter}}"/>
文本設置正確,但顏色不會改變,我收到以下錯誤:
System.Windows.Data Error: 2 : Cannot find governing FrameworkElement or
FrameworkContentElement for target element. BindingExpression:Path=IsActive;
DataItem=null; target element is 'DataGridTextColumn' (HashCode=40349079); target
property is 'Foreground' (type 'Brush')
我該怎么做才能工作?
您需要為列的CellStyle指定帶有DataTrigger的樣式。 例如
<Page.Resources>
<Style TargetType="DataGridCell" x:Key="ActiveCellStyle">
<Setter Property="Foreground" Value="Blue"/>
<Style.Triggers>
<DataTrigger Binding="{Binding IsActive}" Value="{x:Null}">
<Setter Property="Foreground" Value="Green"/>
</DataTrigger>
<DataTrigger Binding="{Binding IsActive}" Value="True">
<Setter Property="Foreground" Value="Red"/>
</DataTrigger>
</Style.Triggers>
</Style>
<Converters:BoolToTextConverter
x:Key="BoolToStatusConverter"
TargetCondition="True"
IsMatchValue="It's active"
IsNotMatchValue="It's dead" />
</Page.Resources>
<Grid>
<DataGrid ItemsSource="{Binding Items}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn
Header="Status"
Binding="{Binding IsActive,
Converter={StaticResource BoolToStatusConverter}}"
CellStyle="{StaticResource ActiveCellStyle}"/>
</DataGrid.Columns>
</DataGrid>
</Grid>
雖然從技術上講不是DataGridTextColumn,但這是我通常做的事情:
<DataGridTemplateColumn Header="Status" SortMemberPath="Status">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Status}" Foreground="{Binding Status, Converter={StaticResource StatusToSolidColor}}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
我得到了我想要的datacontext,我可以在應用程序的其余部分中重用我可能已經存在的轉換器。 此外,我不必硬編碼/維護一組額外的樣式和數據觸發器來獲得所需的效果。
前景是畫筆,而不是顏色。 它可以解析 XAML中的顏色,但是在使用轉換器創建綁定時不會使用它。
使用BoolToBrushConverter,或創建一個SolidColorBrush作為前景,並將其“Color”屬性綁定到BoolToColorConverter。 像這樣:
<DataGridTextColumn Header="Status">
<DataGridTextColumn.Foreground>
<SolidColorBrush Color="{Binding Path=IsActive, Converter={StaticResource BoolToColorConverter}}" />
</DataGridTextColumn.Foreground>
</DataGridTextColumn>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.