基于附件属性更改数据级列的背景颜色



我正在尝试样式 DataGrid,以便如果列具有附加属性以指示是否突出显示。因此,Highlighted = true的列中的这些单元格与Highlighted = false的列有不同的颜色。

我的附件看起来像:

public static class Highlighted
{
    public static bool GetIsHighlighted(DependencyObject obj)
    {
        return (bool)obj.GetValue(IsHighlightedProperty);
    }
    public static void SetIsHighlighted(DependencyObject obj, bool value)
    {
        obj.SetValue(IsHighlightedProperty, value);
    }
    public static readonly DependencyProperty IsHighlightedProperty =
        DependencyProperty.RegisterAttached("IsHighlighted", typeof(bool), typeof(Highlighted), new UIPropertyMetadata(false));
}

DataGridCell样式看起来像:

<Style x:Key="WeldOfficeDataGridCell" TargetType="{x:Type DataGridCell}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type DataGridCell}">
                <Border BorderBrush="{x:Static SystemColors.ActiveBorderBrush}"
                        BorderThickness="0.5"
                        Background="FloralWhite" SnapsToDevicePixels="True">
                    <ContentPresenter ContentTemplate="{TemplateBinding ContentTemplate}" 
                                      Content="{TemplateBinding Content}" 
                                      ContentStringFormat="{TemplateBinding ContentStringFormat}" 
                                      SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" 
                                      VerticalAlignment="Center"
                                      Margin="15,5,5,5" />
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
    <Style.Triggers>
        <Trigger Property="attachedProperties:Highlighted.IsHighlighted" Value="True">
            <Setter Property="Background">
                <Setter.Value>
                    <SolidColorBrush Color="Red" />
                </Setter.Value>
            </Setter>
        </Trigger>
        <Trigger Property="IsSelected" Value="True">
            <Setter Property="Background">
                <Setter.Value>
                    <SolidColorBrush Color="{DynamicResource AccentColor2}" />
                </Setter.Value>
            </Setter>
        </Trigger>
    </Style.Triggers>
</Style>

我在DataGrid中设置属性,例如:

    <DataGrid Margin="27,17,0,0"
              Grid.Column="1"
              ItemsSource="{Binding FilterableBaseMaterials}" 
              AutoGenerateColumns="False" 
              SelectionMode="Single"
              HeadersVisibility="Column"
              CanUserAddRows="False"
              CanUserDeleteRows="False"
              CanUserResizeRows="False"
              Background="{x:Null}">
        <DataGrid.Resources>
            <helpers:BindingProxy x:Key="proxy" Data="{Binding}" />
        </DataGrid.Resources>
        <DataGrid.Columns>
            <DataGridTemplateColumn Header="Specification" IsReadOnly="True" attachedProperties:Highlighted.IsHighlighted="True">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock HorizontalAlignment="Left" Text="{Binding Specification}" />
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
            ...

但是经过几个令人沮丧的时间,我无法弄清楚如何使此功能正常工作,我的Style.Trigger是错误的,因为它永远不会触发颜色的变化,我猜是因为我将属性附加到列,而不是 DataGridCell,但我不知道如何使它起作用,任何帮助将不胜感激。

您正在设置列的IsHighlighted附件的属性。这与将其设置在 cell 上不是一样。

您应该将其设置在最终由列创建的单元格上。您可以在纯XAML中执行此操作的唯一方法是为列定义CellStyle

<DataGridTemplateColumn Header="Specification" IsReadOnly="True">
    <DataGridTemplateColumn.CellStyle>
        <Style TargetType="DataGridCell" BasedOn="{StaticResource WeldOfficeDataGridCell}">
            <Setter Property="attachedProperties:Highlighted.IsHighlighted" Value="True" />
        </Style>
    </DataGridTemplateColumn.CellStyle>
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <TextBlock HorizontalAlignment="Left" Text="{Binding Specification}" />
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

相关内容

  • 没有找到相关文章

最新更新