Изменение фона кнопки программно не работает - PullRequest
0 голосов
/ 22 января 2019

У меня есть панель стека, которая содержит три кнопки. Когда нажимается кнопка, я хочу, чтобы фон оставался постоянно измененным, однако, похоже, он не работает.

Я попытался установить цвет фона программно, как я написал ниже, но, похоже, он не работает. Когда я устанавливаю цвет переднего плана программно, это работает, меняя цвета в соответствии с инструкциями. Я думаю, поскольку я использую шаблон для кнопок в 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 голосов
/ 22 января 2019

Поскольку вы установили фон кнопки в явном виде "#AEEEEE", значит, фон кнопки не будет изменяться кодом.

Я думаю, вы должны использовать TemplateBinding в вашем шаблоне, например:

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