繁体   English   中英

C#-WPF在DataGridColumnHeader中使用DataTrigger

[英]C# - WPF Using DataTrigger in DataGridColumnHeader

如何在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>

在新的解决方案中检查此代码,如果正确设置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;            
    }
  }
}

最后结果:

在此处输入图片说明

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM