1

如何在 DataGridColumHeader 中使用 DataTriggers?使用下面的这段代码,它不起作用。有人知道我该如何解决这个问题吗?

<DataGridTextColumn.HeaderStyle>
   <Style TargetType="{x:Type DataGridColumnHeader}">
     <Setter Property="Background" Value="#FFFFBD21" />
     <Style.Triggers>
      <DataTrigger Binding="{Binding HasChangedRows}" Value="false">
        <Setter Property="Background" Value="#66FFBD21"/>
      </DataTrigger>
    </Style.Triggers>
  </Style>
</DataGridTextColumn.HeaderStyle>
4

1 回答 1

1

在新解决方案中检查此代码,如果 HasChangedRows 绑定设置正确,您将看到它应该可以工作。您可以使用复选框来更改 HasChangedRows 的值

<Window x:Class="WpfApplication10.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"        
    Title="MainWindow" Height="350" Width="525" Loaded="Window_Loaded">
<StackPanel>
    <CheckBox IsThreeState="False" IsChecked="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}, Path=HasChanges, Mode=TwoWay}"
              Content="{Binding RelativeSource={RelativeSource Mode=Self}, Path=IsChecked}"/>

    <DataGrid Name="MainGrid" AutoGenerateColumns="False">
        <DataGrid.Resources>
            <Style TargetType="{x:Type DataGridColumnHeader}" x:Key="customheaderstyle">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}, Path=HasChanges}" Value="false">
                        <Setter Property="Background" Value="#66FFBD21"/>
                    </DataTrigger>
                    <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}, Path=HasChanges}" Value="true">
                        <Setter Property="Background" Value="#FFFFBD21" />
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </DataGrid.Resources>
        <DataGrid.Columns>
            <DataGridTextColumn HeaderStyle="{StaticResource customheaderstyle}" Binding="{Binding}"/>
        </DataGrid.Columns>
    </DataGrid>
</StackPanel>
</Window>

和后面的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.ComponentModel;

namespace WpfApplication10
{
  public partial class MainWindow : Window, INotifyPropertyChanged
  {

   #region INotifyPropertyChanged

    public event PropertyChangedEventHandler PropertyChanged;
    protected void NotifyPropertyChange(string propertyName)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }

    #endregion


    private bool _HasChanges = false;
    public bool HasChanges
    {
        get { return this._HasChanges; }
        set
        {
            this._HasChanges = value;                
            NotifyPropertyChange("HasChanges");

        }
    } 

    public MainWindow()
    {
        InitializeComponent();
    }

    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        String[] list = { "1", "2", "3", "4" };
        this.MainGrid.ItemsSource = list;            
    }
  }
}

最后结果:

在此处输入图像描述

在此处输入图像描述

于 2013-01-21T12:07:38.097 回答