使用DataTrigger自定义WPF DataGrid行样式

使用DataTrigger自定义WPF DataGrid行样式

在WPF开发中,通过DataTrigger可以方便地根据数据的变化自定义控件的样式。本文将展示如何在DataGrid中使用DataTrigger根据条件动态改变行的背景颜色和字体样式。

创建DataGrid控件

首先,我们创建一个包含三列的DataGrid控件:姓名、年龄和生日。我们使用AutoGenerateColumns属性设置为False,并手动定义列:

xml 复制代码
<DataGrid ItemsSource="{Binding Persons}" AutoGenerateColumns="False" Grid.Column="0">
    <DataGrid.Columns>
        <DataGridTextColumn Header="姓名" Binding="{Binding Name}" Width="Auto" />
        <DataGridTextColumn Header="年龄" Binding="{Binding Age}" Width="Auto" />
        <DataGridTextColumn Header="生日" Binding="{Binding Birthday}" Width="*" />
    </DataGrid.Columns>
</DataGrid>
定义DataTriggers

接下来,我们在DataGrid的RowStyle中定义多个DataTrigger,根据不同的年龄值改变行的背景颜色。当CheckBox被选中时,改变字体颜色和样式:

xml 复制代码
<DataGrid.RowStyle>
    <Style TargetType="DataGridRow">
        <Style.Triggers>
            <DataTrigger Binding="{Binding Age}" Value="19">
                <Setter Property="Background" Value="LightBlue"/>
            </DataTrigger>
            <DataTrigger Binding="{Binding Age}" Value="20">
                <Setter Property="Background" Value="LightGreen"/>
            </DataTrigger>
            <DataTrigger Binding="{Binding Age}" Value="21">
                <Setter Property="Background" Value="LightCoral"/>
            </DataTrigger>
            <DataTrigger Binding="{Binding ElementName=chkRedText, Path=IsChecked}" Value="True">
                <Setter Property="Foreground" Value="Red"/>
                <Setter Property="FontSize" Value="16"/>
                <Setter Property="FontWeight" Value="Bold"/>
            </DataTrigger>
        </Style.Triggers>
    </Style>
</DataGrid.RowStyle>
添加用户界面

我们为用户添加输入框和一个CheckBox,用户可以通过这些控件添加新的用户,并选择是否将字体变为红色:

xml 复制代码
<StackPanel Grid.Column="1" Margin="10">
    <TextBlock Text="姓名:"/>
    <TextBox x:Name="txtName" Width="200" Margin="5"/>
    <TextBlock Text="年龄:"/>
    <TextBox x:Name="txtAge" Width="200" Margin="5"/>
    <TextBlock Text="地址:"/>
    <TextBox x:Name="txtAddress" Width="200" Margin="5"/>
    <CheckBox x:Name="chkRedText" Content="红色字体" Margin="5"/>
    <Button Content="增加用户" Width="200" Margin="5" Click="AddPerson_Click"/>
</StackPanel>
后台代码

最后,在C#后台代码中实现数据绑定和添加用户功能:

csharp 复制代码
public partial class MainWindow : Window, INotifyPropertyChanged
{
    public ObservableCollection<Person> Persons { get; set; }
    public MainWindow()
    {
        InitializeComponent();
        Persons = new ObservableCollection<Person>
        {
            new Person { Name = "新人", Age = 20, Birthday = DateTime.Now },
            new Person { Name = "新人", Age = 19, Birthday = DateTime.Now },
            new Person { Name = "新人", Age = 21, Birthday = DateTime.Now },
            new Person { Name = "新人", Age = 18, Birthday = DateTime.Now },
            new Person { Name = "新人", Age = 19, Birthday = DateTime.Now }
        };
        DataContext = this;
    }

    private void AddPerson_Click(object sender, RoutedEventArgs e)
    {
        if (int.TryParse(txtAge.Text, out int age))
        {
            Persons.Add(new Person
            {
                Name = txtName.Text,
                Age = age,
                Birthday = DateTime.Now,
                Address = txtAddress.Text
            });
        }
        else
        {
            MessageBox.Show("请输入有效的年龄。");
        }
    }
}

结论

通过上述方法,可以在WPF中使用DataTrigger轻松实现DataGrid行样式的动态调整。这样的功能可以显著提升用户界面的交互性和数据展示的直观性。### 使用DataTrigger自定义WPF DataGrid行样式

在WPF开发中,通过DataTrigger可以方便地根据数据的变化自定义控件的样式。本文将展示如何在DataGrid中使用DataTrigger根据条件动态改变行的背景颜色和字体样式。

创建DataGrid控件

首先,我们创建一个包含三列的DataGrid控件:姓名、年龄和生日。我们使用AutoGenerateColumns属性设置为False,并手动定义列:

xml 复制代码
<DataGrid ItemsSource="{Binding Persons}" AutoGenerateColumns="False" Grid.Column="0">
    <DataGrid.Columns>
        <DataGridTextColumn Header="姓名" Binding="{Binding Name}" Width="Auto" />
        <DataGridTextColumn Header="年龄" Binding="{Binding Age}" Width="Auto" />
        <DataGridTextColumn Header="生日" Binding="{Binding Birthday}" Width="*" />
    </DataGrid.Columns>
</DataGrid>
定义DataTriggers

接下来,我们在DataGrid的RowStyle中定义多个DataTrigger,根据不同的年龄值改变行的背景颜色。当CheckBox被选中时,改变字体颜色和样式:

xml 复制代码
<DataGrid.RowStyle>
    <Style TargetType="DataGridRow">
        <Style.Triggers>
            <DataTrigger Binding="{Binding Age}" Value="19">
                <Setter Property="Background" Value="LightBlue"/>
            </DataTrigger>
            <DataTrigger Binding="{Binding Age}" Value="20">
                <Setter Property="Background" Value="LightGreen"/>
            </DataTrigger>
            <DataTrigger Binding="{Binding Age}" Value="21">
                <Setter Property="Background" Value="LightCoral"/>
            </DataTrigger>
            <DataTrigger Binding="{Binding ElementName=chkRedText, Path=IsChecked}" Value="True">
                <Setter Property="Foreground" Value="Red"/>
                <Setter Property="FontSize" Value="16"/>
                <Setter Property="FontWeight" Value="Bold"/>
            </DataTrigger>
        </Style.Triggers>
    </Style>
</DataGrid.RowStyle>
添加用户界面

我们为用户添加输入框和一个CheckBox,用户可以通过这些控件添加新的用户,并选择是否将字体变为红色:

xml 复制代码
<StackPanel Grid.Column="1" Margin="10">
    <TextBlock Text="姓名:"/>
    <TextBox x:Name="txtName" Width="200" Margin="5"/>
    <TextBlock Text="年龄:"/>
    <TextBox x:Name="txtAge" Width="200" Margin="5"/>
    <TextBlock Text="地址:"/>
    <TextBox x:Name="txtAddress" Width="200" Margin="5"/>
    <CheckBox x:Name="chkRedText" Content="红色字体" Margin="5"/>
    <Button Content="增加用户" Width="200" Margin="5" Click="AddPerson_Click"/>
</StackPanel>
后台代码

最后,在C#后台代码中实现数据绑定和添加用户功能:

csharp 复制代码
public partial class MainWindow : Window, INotifyPropertyChanged
{
    public ObservableCollection<Person> Persons { get; set; }
    public MainWindow()
    {
        InitializeComponent();
        Persons = new ObservableCollection<Person>
        {
            new Person { Name = "新人", Age = 20, Birthday = DateTime.Now },
            new Person { Name = "新人", Age = 19, Birthday = DateTime.Now },
            new Person { Name = "新人", Age = 21, Birthday = DateTime.Now },
            new Person { Name = "新人", Age = 18, Birthday = DateTime.Now },
            new Person { Name = "新人", Age = 19, Birthday = DateTime.Now }
        };
        DataContext = this;
    }

    private void AddPerson_Click(object sender, RoutedEventArgs e)
    {
        if (int.TryParse(txtAge.Text, out int age))
        {
            Persons.Add(new Person
            {
                Name = txtName.Text,
                Age = age,
                Birthday = DateTime.Now,
                Address = txtAddress.Text
            });
        }
        else
        {
            MessageBox.Show("请输入有效的年龄。");
        }
    }
}

结论

通过上述方法,可以在WPF中使用DataTrigger轻松实现DataGrid行样式的动态调整。这样的功能可以显著提升用户界面的交互性和数据展示的直观性。

相关推荐
码界奇点18 分钟前
基于eBPF技术的高性能网络防火墙系统设计与实现
开发语言·网络·毕业设计·php·wpf·go语言·源代码管理
cjp5604 小时前
022.WPF 封装TextBox控件限制只输入数字自定义属性
wpf
cjp5604 小时前
021.WPF 以MVVM模式控制combox控件显示/隐藏
wpf
小北方城市网15 小时前
Redis 分布式锁高可用实现:从原理到生产级落地
java·前端·javascript·spring boot·redis·分布式·wpf
流水线上的指令侠1 天前
补充说明——针对《C#:从 0 到 1 创建基于 NUnit + FlaUI 的 WPF UI 自动化测试项目》
功能测试·ui·c#·自动化·wpf
流水线上的指令侠1 天前
C# 实战:从 0 到 1 搭建基于 NUnit + FlaUI 的 WPF UI 自动化测试项目
功能测试·ui·c#·自动化·wpf·visual studio
贾修行1 天前
.NET 全栈开发学习路线:从入门到分布式
c#·.net·wpf·asp.net core·web api·winforms·services
晓13131 天前
第四章:Redis实战应用及常见问题(下篇)
java·数据库·缓存·wpf
掘根2 天前
【jsonRpc项目】客户端的Requestor模块,RpcCaller模块
wpf
FuckPatience2 天前
WPF ListBoxItem绑定自己在ListBox中的顺序
wpf