我有一个堆栈面板,其中包含三个按钮。单击按钮后,我希望背景保持永久更改,但是似乎无法正常工作。
我尝试按照下面的程序设置背景色,但是似乎不起作用。当我以编程方式设置前景色有效时,请按照说明更改颜色。我认为当我在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">
是否有任何方法(如果模板具有优先权)覆盖模板并以编程方式更改背景?
答案 0 :(得分:0)
因为您已将按钮的背景显式设置为“ #AEEEEE”,所以该按钮的背景不会被代码更改。
我认为您应该在模板中使用TemplateBinding,例如:
<Border Background="{TemplateBinding Background}">
<ContentPresenter ...... />
</Border>