将样式绑定到DataGridTextColumns ElementStyle

时间:2011-09-30 13:24:05

标签: c# wpf binding

我有一些带有一些对象的数据网格。对象具有名称,“类型”属性和一堆不相关的属性。

基于类型是否为“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}}"/>

这一切都很好。但没有风格。转换器不会被触发......

1 个答案:

答案 0 :(得分:1)

我认为您希望使用StyleSelector而不是转换器。