C# WPF DataGrid 按值更改单元格颜色
C# WPF DataGrid Change cells color by value
我是 WPF 的新手,正在尝试按值突出显示 Datagrid 单元格。
我已将项目列表加载到 DataGrid,我想标记所有错误的输入值(表示为值“0”):
我做了一个简单的示例来指导您如何完成它
Xaml代码
<DataGrid x:Name="dataGrid" IsEnabled="True" CanUserAddRows="False" AutoGenerateColumns="False" Width="275" HorizontalAlignment="Left">
<DataGrid.Columns>
<DataGridTextColumn Header="ID" Binding="{Binding ID}" Width="25"/>
<DataGridTextColumn Header="Weight" Binding="{Binding Weight}" Width="25"/>
<DataGridTextColumn Header="Quantity" Binding="{Binding Quantity}" Width="25"/>
<DataGridTemplateColumn Header="Length" Width="25">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBox Text="{Binding Length, UpdateSourceTrigger=LostFocus}">
<TextBox.Style>
<Style TargetType="{x:Type TextBox}">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=Length}" Value="0">
<Setter Property="BorderBrush" Value="Red"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Header="Height" Binding="{Binding Height}" Width="25"/>
<DataGridTextColumn Header="Width" Binding="{Binding Width}" Width="25"/>
<DataGridTextColumn Header="X" Binding="{Binding X}" Width="25"/>
<DataGridTextColumn Header="Y" Binding="{Binding Y}" Width="25"/>
<DataGridTextColumn Header="Z" Binding="{Binding Z}" Width="25"/>
</DataGrid.Columns>
</DataGrid>
背后的代码
public partial class MainWindow : Window
{
public ObservableCollection<Model> Source { get; set; }
public MainWindow()
{
InitializeComponent();
Source = new ObservableCollection<Model>
{
new Model {ID=1,Weight=3,Quantity=5,Length=11,Height=12,Width=0,X=1,Y=-1,Z=-1 },
new Model {ID=2,Weight=21,Quantity=23,Length=0,Height=23,Width=11,X=-1,Y=-1,Z=-1 }
};
dataGrid.ItemsSource = Source;
}
}
编辑
只需在 DataTemplate
中的 TextBox
中添加 UpdateSourceTrigger
我是 WPF 的新手,正在尝试按值突出显示 Datagrid 单元格。 我已将项目列表加载到 DataGrid,我想标记所有错误的输入值(表示为值“0”):
我做了一个简单的示例来指导您如何完成它
Xaml代码
<DataGrid x:Name="dataGrid" IsEnabled="True" CanUserAddRows="False" AutoGenerateColumns="False" Width="275" HorizontalAlignment="Left">
<DataGrid.Columns>
<DataGridTextColumn Header="ID" Binding="{Binding ID}" Width="25"/>
<DataGridTextColumn Header="Weight" Binding="{Binding Weight}" Width="25"/>
<DataGridTextColumn Header="Quantity" Binding="{Binding Quantity}" Width="25"/>
<DataGridTemplateColumn Header="Length" Width="25">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBox Text="{Binding Length, UpdateSourceTrigger=LostFocus}">
<TextBox.Style>
<Style TargetType="{x:Type TextBox}">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=Length}" Value="0">
<Setter Property="BorderBrush" Value="Red"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Header="Height" Binding="{Binding Height}" Width="25"/>
<DataGridTextColumn Header="Width" Binding="{Binding Width}" Width="25"/>
<DataGridTextColumn Header="X" Binding="{Binding X}" Width="25"/>
<DataGridTextColumn Header="Y" Binding="{Binding Y}" Width="25"/>
<DataGridTextColumn Header="Z" Binding="{Binding Z}" Width="25"/>
</DataGrid.Columns>
</DataGrid>
背后的代码
public partial class MainWindow : Window
{
public ObservableCollection<Model> Source { get; set; }
public MainWindow()
{
InitializeComponent();
Source = new ObservableCollection<Model>
{
new Model {ID=1,Weight=3,Quantity=5,Length=11,Height=12,Width=0,X=1,Y=-1,Z=-1 },
new Model {ID=2,Weight=21,Quantity=23,Length=0,Height=23,Width=11,X=-1,Y=-1,Z=-1 }
};
dataGrid.ItemsSource = Source;
}
}
编辑
只需在 DataTemplate
TextBox
中添加 UpdateSourceTrigger