Rumah >pembangunan bahagian belakang >C++ >WPF DataGrid: Bagaimana Menukar Sel, Bukan Baris, Warna Berdasarkan Nilai?

WPF DataGrid: Bagaimana Menukar Sel, Bukan Baris, Warna Berdasarkan Nilai?

Barbara Streisand
Barbara Streisandasal
2025-01-23 09:17:10944semak imbas

WPF DataGrid: How to Change Cell, Not Row, Color Based on Value?

Tukar warna sel WPF DataGrid berdasarkan nilai

Apabila menyesuaikan WPF DataGrid, anda mungkin mahu menggunakan warna sel yang berbeza berdasarkan nilai tertentu. Untuk melakukan ini, anda boleh menggunakan gaya atau penukar nilai dalam XAML lajur DataGrid. Tetapi apa yang berlaku apabila anda menemui gaya yang secara tidak sengaja mempengaruhi keseluruhan baris dan bukannya sel sasaran?

Analisis Masalah

Jika anda menghadapi masalah ini, ini mungkin kerana anda merujuk sifat CellStyle DataGrid, yang digunakan pada keseluruhan baris dan bukannya sel individu. Untuk menyelesaikan masalah ini, sifat CellStyle mesti ditentukan untuk setiap lajur tertentu dalam DataGrid.

Gunakan gaya pada lajur

Untuk menyesuaikan penampilan sel individu, sasarkan sifat ElementStyle lajur itu. Contohnya, jika anda ingin menyerlahkan semua sel dengan nilai tertentu (cth. "John" dalam lajur "Nama"), anda boleh menggunakan XAML berikut:

<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>

Menggunakan kaedah ini, perubahan warna hanya akan digunakan pada sel yang memenuhi kriteria yang ditetapkan.

Gunakan penukar nilai

Selain menggunakan gaya, anda juga boleh memanfaatkan penukar nilai untuk mengubah suai warna sel. Penukar nilai membolehkan anda menukar nilai terikat kepada nilai yang berbeza, seperti berus. Pertimbangkan contoh C# berikut:

<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>

Untuk menggunakan penukar, masukkannya dalam bahagian Window.Resources XAML anda dan ikat latar belakang sel pada penukar nilai seperti ini:

<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>

Ikat terus pada sifat

Cara lain untuk mengawal warna latar belakang sel adalah dengan mengikat terus pada sifat dalam model data yang mengembalikan berus yang diingini. Kaedah ini memerlukan anda mengendalikan pemberitahuan perubahan harta untuk memastikan warna latar belakang dikemas kini apabila data asas berubah.

Atas ialah kandungan terperinci WPF DataGrid: Bagaimana Menukar Sel, Bukan Baris, Warna Berdasarkan Nilai?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn