WPF DataGridColumn样式取决于标记

时间:2013-12-30 12:42:34

标签: c# .net wpf wpfdatagrid

here中的帖子之后,我设法为我的数据网格的列创建了Tag属性。现在,我希望根据标记中的值使用不同颜色的列。目标是在列中包含日期表,并且今天的当前日期将突出显示(与列对应的日期存储在其标记中)。它可以实现吗?我找到了基于以编程方式着色单元格的解决方案,但它不适合我的需求(多线程问题 - 有时单元格在停止填充数据之前被绘制然后绘制不起作用)。

提前致谢。

修改

好的,我已经按照Nayeem Mansoori给出的答案来到这里:

风格:

<Style x:Key="CellStyle" TargetType="{x:Type DataGridCell}">
        <Setter Property="Foreground" Value="Black" />
        <Setter Property="Background" Value="{TemplateBinding local:DataGridCellThemeProps.Brush}" />
        <Style.Triggers>
            <Trigger Property="IsSelected" Value="True">
                <Setter Property="Background" Value="#B2DCDCDC" />
                <Setter Property="BorderBrush" Value="#B2DCDCDC" />
            </Trigger>
            <Trigger Property="IsSelected" Value="False">
                <Setter Property="Background" Value="#7FFFFFFF" />
                <Setter Property="BorderBrush" Value="#7FFFFFFF" />
            </Trigger>
        </Style.Triggers>
    </Style>

DataGrid列:

<DataGridTextColumn local:DataGridCellThemeProps.Brush="Thistle" 
                                Header="{x:Static props:Resources.Monday}" 
                                Binding="{Binding Monday, Converter={StaticResource ZeroConverter}, Mode=TwoWay}" 
                                CellStyle="{StaticResource CellStyle}" Width="75"/>

类别:

public static class DataGridCellThemeProps {
    public static SolidColorBrush GetBrush(DependencyObject obj) {
        return (SolidColorBrush)obj.GetValue(BrushProperty);
    }

    public static void SetBrush(DependencyObject obj, SolidColorBrush value) {
        obj.SetValue(BrushProperty, value);
    }

    public static readonly DependencyProperty BrushProperty =
        DependencyProperty.RegisterAttached(
            "Brush",
            typeof(SolidColorBrush),
            typeof(DataGridCellThemeProps),
            new FrameworkPropertyMetadata(Brushes.Black));
}

当我运行我的应用程序时,我得到例外:

  

例外:{“'设置属性'System.Windows.Setter.Value'引发异常。”行号“25”和行位置“14”。“}

     

内部异常:{“表达式类型不是有效的样式值。”}

我已经仔细检查过该类的命名空间,这是正确的。有什么想法吗?

0 个答案:

没有答案