Tukar warna latar belakang sel WPF DataGrid berdasarkan nilai sel
WPF DataGrid membenarkan menyesuaikan penampilan sel berdasarkan nilai sel. Walau bagaimanapun, menggunakan gaya terus pada DataGridCell
mempengaruhi keseluruhan baris, bukan sel individu.
Penyelesaian adalah untuk menyasarkan lajur tertentu yang mengandungi kandungan sel yang berbeza. Sebagai contoh, katakan anda ingin menyerlahkan semua sel dalam lajur "Nama" yang mempunyai nilai "John."
sel berasaskan TextBlock
Untuk lajur yang mengandungi TextBlocks, anda boleh menggunakan ElementStyle
dalam Trigger
lajur untuk menukar atribut Text
berdasarkan nilai Background
:
<code class="language-xml"><DataGridTextColumn Binding="{Binding Name}"> <DataGridTextColumn.ElementStyle> <Style TargetType="TextBlock"> <Style.Triggers> <Trigger Property="Text" Value="John"> <Setter Property="Background" Value="LightGreen"/> </Trigger> </Style.Triggers> </Style> </DataGridTextColumn.ElementStyle> </DataGridTextColumn></code>
Kaedah Penukar Nilai
Alternatifnya ialah menggunakan penukar nilai untuk menukar nilai sel kepada berus:
<code class="language-csharp">public class NameToBrushConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { string input = (string)value; switch (input) { case "John": return Brushes.LightGreen; default: return DependencyProperty.UnsetValue; } } public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { throw new NotSupportedException(); } }</code>
Penggunaan dalam XAML:
<code class="language-xml"><Window.Resources> <local:NameToBrushConverter x:Key="NameToBrushConverter"/> </Window.Resources> <DataGridTextColumn Binding="{Binding Name}"> <DataGridTextColumn.ElementStyle> <Setter Property="Background" Value="{Binding Name, Converter={StaticResource NameToBrushConverter}}"/> </DataGridTextColumn.ElementStyle> </DataGridTextColumn></code>
Pengikatan atribut langsung
Anda juga boleh mengikat terus Background
pada harta yang mengembalikan berus yang diingini:
<code class="language-csharp">public string Name { get { return _name; } set { if (_name != value) { _name = value; OnPropertyChanged(nameof(Name)); OnPropertyChanged(nameof(NameBrush)); } } } public Brush NameBrush { get { switch (Name) { case "John": return Brushes.LightGreen; default: break; } return Brushes.Transparent; } }</code>
Mengikat dalam XAML:
<code class="language-xml"><DataGridTextColumn Binding="{Binding Name}"> <DataGridTextColumn.ElementStyle> <Setter Property="Background" Value="{Binding NameBrush}"/> </DataGridTextColumn.ElementStyle> </DataGridTextColumn></code>
Atas ialah kandungan terperinci Bagaimanakah saya boleh menukar warna latar belakang sel individu secara bersyarat dalam WPF DataGrid berdasarkan nilainya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!