[英]How to change background color of a cell in WPF datagrid based on its value
[英]WPF DataGrid change Cell background if the cell contains a specific value
考慮以下XML代碼。 我真正想做的是,如果我的數據網格的單元格包含特定值,例如,如果我的某些數據網格單元格包含值“ 1”,則無論這些單元格位於何處,我都希望這些單元格顯示為淺綠色是。 目前,我正在嘗試使用xml中的觸發器來執行此操作,但我遇到了麻煩,請幫忙..
<Window x:Class="WPFDatagridCustomization.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:loc="clr-namespace:WPFDatagridCustomization"
xmlns:local="clr-namespace:WPFDatagridCustomization.HelperClasses"
Title="MainWindow"
Width="600"
Height="500">
<Grid>
<DataGrid Name="dataGrid1"
Grid.Row="3"
Grid.Column="1"
Margin="10"
HorizontalAlignment="Left"
VerticalAlignment="Top"
AlternationCount="2"
AutoGenerateColumns="False"
ItemsSource="{Binding TemperatureCollection}"
Loaded="dataGrid1_Loaded"
MinRowHeight="26"
RowDetailsVisibilityChanged="dataGrid1_RowDetailsVisibilityChanged">
<DataGrid.Columns>
<DataGridTextColumn Width="120"
Binding="{Binding TableNo}"
Header="Table No" />
<DataGridTextColumn Width="120"
Binding="{Binding TableArea}"
Header="Unknown Column" />
<DataGridTextColumn Width="40"
Binding="{Binding time6}"
Header="6:00" />
<DataGridTextColumn Width="40"
Binding="{Binding time630}"
Header="6:30" />
<DataGridTextColumn Width="40"
Binding="{Binding time7}"
Header="7:00" />
<DataGridTextColumn Width="40"
Binding="{Binding time730}"
Header="7:30" />
<DataGridTextColumn Width="40"
Binding="{Binding time8}"
Header="8:00" />
<DataGridTextColumn Width="40"
Binding="{Binding time830}"
Header="8:30" />
<DataGridTextColumn Width="40"
Binding="{Binding time9}"
Header="9:00" />
<DataGridTextColumn Width="40"
Binding="{Binding time930}"
Header="9:30" />
<DataGridTextColumn Width="40"
Binding="{Binding time10}"
Header="10:00" />
<DataGridTextColumn Width="40"
Binding="{Binding time1030}"
Header="10:30" />
<DataGridTextColumn Width="40"
Binding="{Binding time11}"
Header="11:00" />
<DataGridTextColumn Width="40"
Binding="{Binding time1130}"
Header="11:30" />
<DataGridTextColumn Width="40"
Binding="{Binding time12}"
Header="12:00" />
<DataGridTextColumn Width="40"
Binding="{Binding time1230}"
Header="12:30" />
<DataGridTextColumn Width="40"
Binding="{Binding time13}"
Header="13:00" />
<DataGridTextColumn Width="40"
Binding="{Binding time1330}"
Header="13:30" />
<DataGridTextColumn Width="40"
Binding="{Binding time14}"
Header="14:00" />
<DataGridTextColumn Width="40"
Binding="{Binding time1430}"
Header="14:30" />
<DataGridTextColumn Width="40"
Binding="{Binding time15}"
Header="15:00" />
<DataGridTextColumn Width="40"
Binding="{Binding time1530}"
Header="15:30" />
<DataGridTextColumn Width="40"
Binding="{Binding time16}"
Header="16:00" />
<DataGridTextColumn Width="40"
Binding="{Binding time1630}"
Header="16:30" />
<DataGridTextColumn Width="40"
Binding="{Binding time17}"
Header="17:00" />
<DataGridTextColumn Width="40"
Binding="{Binding time1730}"
Header="17:30" />
<DataGridTextColumn Width="40"
Binding="{Binding time18}"
Header="18:00" />
<DataGridTextColumn Width="40"
Binding="{Binding time1830}"
Header="18:30" />
<DataGridTextColumn Width="40"
Binding="{Binding time19}"
Header="19:00" />
<DataGridTextColumn Width="40"
Binding="{Binding time1930}"
Header="19:30" />
<DataGridTextColumn Width="40"
Binding="{Binding time20}"
Header="20:00" />
<DataGridTextColumn Width="40"
Binding="{Binding time2030}"
Header="20:30" />
<DataGridTextColumn Width="40"
Binding="{Binding time21}"
Header="21:00" />
<DataGridTextColumn Width="40"
Binding="{Binding time2130}"
Header="21:30" />
<DataGridTextColumn Width="40"
Binding="{Binding time22}"
Header="22:00" />
<DataGridTextColumn Width="40"
Binding="{Binding time2230}"
Header="22:30" />
<DataGridTextColumn Width="40"
Binding="{Binding time23}"
Header="23:00" />
<DataGridTextColumn Width="40"
Binding="{Binding time2330}"
Header="23:30" />
<DataGridTextColumn Width="40"
Binding="{Binding time24}"
Header="24:00" />
<DataGridTextColumn>
<DataGridTextColumn.CellStyle>
<Style TargetType="DataGridTextColumn">
<Style.Triggers>
<Trigger Property="PorpertyToGetCellContent" Value="1">
<Setter Property="Foreground" Value="LightGreen"/>
</Trigger>
</Style.Triggers>
</Style>
</DataGridTextColumn.CellStyle>
</DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
這種方法允許基於一個單元格更改顏色,這可能是在特定列中進行更改的最簡單方法。 請參閱以下示例:
模型:
public class Person
{
public int IdPerson { get; set; }
public string Name { get; set; }
public string SurName { get; set; }
}
XAML:
<DataGrid Name="dataGrid" ItemsSource="{Binding Persons}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Id" Binding="{Binding Path=IdPerson}">
<DataGridTextColumn.ElementStyle>
<Style TargetType="{x:Type TextBlock}">
<Style.Triggers>
<Trigger Property="Text" Value="0">
<Setter Property="Background" Value="Bisque"/>
</Trigger>
</Style.Triggers>
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
<DataGridTextColumn Header="Name" Binding="{Binding Path=Name}"/>
<DataGridTextColumn Header="SurName" Binding="{Binding Path=SurName}"/>
</DataGrid.Columns>
</DataGrid>
這是示例代碼
<Window.Resources>
<Style TargetType="{x:Type DataGridCell}" x:Key="MyCellStyle">
<Style.Triggers>
<DataTrigger Binding="{Binding Id}" Value="2">
<Setter Property="Background" Value="LightCoral"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Window.Resources>
<Grid Margin="10">
<DataGrid Name="dgUsers" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Id" Binding="{Binding Id}" CellStyle="{StaticResource ResourceKey=MyCellStyle }" />
<DataGridTextColumn Header="Name" Binding="{Binding Name}" />
<DataGridTextColumn Header="Birthday" Binding="{Binding Birthday}" />
</DataGrid.Columns>
<DataGrid.RowDetailsTemplate>
<DataTemplate>
<TextBlock Text="{Binding Details}" Margin="10" />
</DataTemplate>
</DataGrid.RowDetailsTemplate>
</DataGrid>
</Grid>
public class User
{
public int Id { get; set; }
public string Name { get; set; }
public DateTime Birthday { get; set; }
}
public MainWindow()
{
InitializeComponent();
List<User> users = new List<User>();
users.Add(new User() { Id = 1, Name = "John Doe", Birthday = new DateTime(1971, 7, 23) });
users.Add(new User() { Id = 2, Name = "Jane Doe", Birthday = new DateTime(1974, 1, 17) });
users.Add(new User() { Id = 3, Name = "Sammy Doe", Birthday = new DateTime(1991, 9, 2) });
dgUsers.ItemsSource = users;
}
在這里,單元格的值綁定到Users
的Id
字段
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.