如何根据另一列中的值更改DataGrid中按钮的前景颜色? WPF C#

问题描述

对于一个项目,我需要根据数据库返回的值设置按钮的前景色。

F.e.如果值== 1,则前景需要为绿色。
当值== 0时,它必须具有其原始的灰色。

我在wpf DataGrid中具有以下按钮设计

<DataGrid.Columns>
    <DataGridTemplateColumn Width="40">
        <DataGridTemplateColumn.CellTemplate>
            <DataTemplate>
                <Button Name="FavoriteButton" ... Foreground="#454545" Click="Button_Click">ButtonTextHere</Button>
            </DataTemplate>
        </DataGridTemplateColumn.CellTemplate>
    </DataGridTemplateColumn>
</DataGrid.Columns>

其他列由DataGrid的ItemsSource自动生成

我试图在DataGrid的后面代码中声明一个公共按钮,但无法引用按钮名称“ FavoriteButton”
这就是我正在尝试的

public partial class DataGridMain : UserControl
{
    public Button btn;

    public DataGridMain()
    {
        InitializeComponent();
        btn = FavoriteButton
    }
}

我已经有了这段代码来遍历我的DataGrid

foreach (System.Data.DaTarowView dr in MainGrid.ItemsSource)
{
    if (dr[9].ToString() == "1")
    {
        // here should come the action to actually
        // change the foreground color of the Button.                   
    }
    else
    {
        // Set original color
    }
}

如果有人知道解决这个问题的好方法,那么如果您分享您的知识,我将非常感激!

解决方法

只需向您的DataTrigger中添加一个Button,如下所示:

<DataGrid.Columns>
            <DataGridTemplateColumn Width="40">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <Button Name="FavoriteButton" Click="FavoriteButton_Click">ButtonTextHere
                            <Button.Style>
                                <Style TargetType="Button">
                                    <Setter Property="Foreground" Value="#454545"/>
                                    <Style.Triggers>
                                        <DataTrigger Binding="{Binding}" Value="true">
                                            <Setter Property="Foreground" Value="Green"/>
                                        </DataTrigger>
                                    </Style.Triggers>
                                </Style>
                            </Button.Style>
                        </Button>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
        </DataGrid.Columns>

此外,最好将您的颜色映射到其他StaticResource与其他UI组件共享的颜色,以使您可以快速轻松地进行更改(如果需要)。

,

将XAML中的前景色绑定到另一个color属性,因此可以在代码中对其进行更改:

<Button x:Name="color" Foreground="Green" Visibility="Hidden"/>

将其放入您的FavoriteButton中:

Foreground="{Binding ElementName=color,Path=Foreground,UpdateSourceTrigger=PropertyChanged}"

现在您可以像这样更改颜色:

color.Foreground = Brushes.Gray;

我承认,这不是一种专业的方法,但是应该可行