以编程方式更改按钮背景不起作用

时间:2019-01-22 03:49:06

标签: c# wpf button background

我有一个堆栈面板,其中包含三个按钮。单击按钮后,我希望背景保持永久更改,但是似乎无法正常工作。

我尝试按照下面的程序设置背景色,但是似乎不起作用。当我以编程方式设置前景色有效时,请按照说明更改颜色。我认为当我在XAML中使用按钮模板时(在其中分配背景色),它优先于程序更改。

尝试更改背景:

AColour.Background = Brushes.Black;
BColour.Background = Brushes.Red;
CColour.Background = Brushes.Black;

尝试更改前景(有效):

AColour.Foreground = Brushes.Black;
BColour.Foreground = Brushes.Red;
CColour.Foreground = Brushes.Black;

XAML(按钮模板):

<Window.Resources>
    <ControlTemplate x:Key="ButtonStyle" TargetType="{x:Type Button}">
        <Border Name="body" Background="#AEEEEE" BorderThickness="0" BorderBrush="DimGray" Padding="2">
            <ContentPresenter HorizontalAlignment="Left" VerticalAlignment="Center" />
        </Border>
        <ControlTemplate.Triggers>
            <Trigger Property="IsMouseOver" Value="True">
                <Setter Property="Background" TargetName="body" Value="#12CCD3"/>
            </Trigger>
            <Trigger Property="IsPressed" Value="True">
                <Setter Property="Background" TargetName="body" Value="#009DA2"/>
            </Trigger>
        </ControlTemplate.Triggers>
    </ControlTemplate>

XAML按钮声明(除名称以外的所有3个按钮相同)

 <Button Cursor="Hand" x:Name="AColour" Height="40" Template="{StaticResource ButtonStyle}" Width ="100" Click="A_Click">

是否有任何方法(如果模板具有优先权)覆盖模板并以编程方式更改背景?

1 个答案:

答案 0 :(得分:0)

因为您已将按钮的背景显式设置为“ #AEEEEE”,所以该按钮的背景不会被代码更改。

我认为您应该在模板中使用TemplateBinding,例如:

<Border  Background="{TemplateBinding Background}">
        <ContentPresenter ...... />
    </Border>