我有一些带有一些对象的数据网格。对象具有名称,“类型”属性和一堆不相关的属性。
基于类型是否为“MaterialType”,我想为单元格文本块设置样式(粗体和打算10px)
我开始使用转换器。 =>它获取类型并转换为字体权重。
<DataGridTextColumn.ElementStyle>
<Style TargetType="TextBlock">
<Setter Property="FontWeight" Value="{Binding type, Converter={StaticResource ResourceKey=TypeToFontWeightConverter}}"/>
<Setter Property="Padding" Value="10,0,0,0"/>
</Style>
</DataGridTextColumn.ElementStyle>
它有效..但我只需设置字体权重。
我想要个人风格。
所以我将我的转换器编辑成了TypeToStyle转换器
class TypeToStyleConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
Style style = new Style(typeof(TextBlock));
if (value is Type && value == typeof(MaterialType))
{
style.Setters.Add(new Setter(TextBlock.FontWeightProperty, FontWeights.Bold));
style.Setters.Add(new Setter(TextBlock.PaddingProperty, new Thickness(0)));
}
else
{
style.Setters.Add(new Setter(TextBlock.FontWeightProperty, FontWeights.Bold));
style.Setters.Add(new Setter(TextBlock.PaddingProperty, new Thickness(10,0,0,0)));
}
return style;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
#endregion
}
然后我绑定转换器。
<DataGridTextColumn Binding="{Binding Name}"
Header="Name"
IsReadOnly="True"
Width="1*"
ElementStyle="{Binding type, Converter={StaticResource ResourceKey=TypeToStyleConverter}}"/>
这一切都很好。但没有风格。转换器不会被触发......