Как установить цвет фона кнопки, к которой применен стиль, из кода?
Итак, у меня есть кнопка, к которой применен стиль. Код для кнопки такой:
<Button Command="w:Command.ShowTBDisplay" Style="{DynamicResource button_displayOptions}" Content="Display TextBlock" Height="34.5" Margin="0,4,0,0" Name="btn_displayTB" />
Когда кнопка нажата, я хочу изменить цвет ее фона (постоянно, пока не будет нажата другая кнопка). Цвет, который я хочу использовать, является динамическим ресурсом.
Внутри метода ShowTBDisplay_Executed у меня есть такой код:
btn_displayTB.Background = FindResource("cClickColor") as Brush;
Но когда я это делаю, ничего не происходит, цвет не устанавливается.
Я полагаю, что цвет стиля переписывает все, что я пытаюсь изменить, на... но я не уверен.
Итак, как мне изменить backColor кнопки со стилем, примененным к ней?
Вот стиль кнопки, а также цвет, который я хочу использовать (оба стиля находятся в файле app.xaml):
<Style x:Key="button_displayOptions" TargetType="{x:Type Button}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Grid>
<Rectangle x:Name="rectangle" Fill="{DynamicResource cMenuBackground}"/>
<ContentPresenter x:Name="tb" TextBlock.Foreground="White" HorizontalAlignment="Left" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="Center" Margin="8,5,0,5" Height="19.5"/>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsFocused" Value="True"/>
<Trigger Property="IsDefaulted" Value="True"/>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Fill" TargetName="rectangle" Value="{DynamicResource cMenuItemHighlight}"/>
<Setter Property="TextBlock.Foreground" TargetName="tb" Value="Black"/>
</Trigger>
<Trigger Property="IsPressed" Value="True"/>
<Trigger Property="IsEnabled" Value="False"/>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<SolidColorBrush x:Key="cMenuItemHighlight">#FFAFAFAF</SolidColorBrush>
Спасибо!
1 ответ
Ваш шаблон переопределяет шаблон по умолчанию и Background
свойство Button больше ничего не делает, вам нужно привязать некоторый элемент управления внутри шаблона к свойству, используя TemplateBinding
например.
Изменить: Прямоугольник не должен иметь конкретное значение заливки в шаблоне, это, вероятно, то, что вы хотите:
<Style x:Key="button_displayOptions" TargetType="{x:Type Button}">
<Setter Property="Background" Value="{DynamicResource cMenuBackground}" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Grid>
<Rectangle x:Name="rectangle" Fill="{TemplateBinding Background}" />
<ContentPresenter x:Name="tb" TextBlock.Foreground="White" HorizontalAlignment="Left"
RecognizesAccessKey="True"
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
VerticalAlignment="Center" Margin="8,5,0,5" Height="19.5" />
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsFocused" Value="True" />
<Trigger Property="IsDefaulted" Value="True" />
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Fill" TargetName="rectangle"
Value="{DynamicResource cMenuItemHighlight}" />
<Setter Property="TextBlock.Foreground" TargetName="tb" Value="Black" />
</Trigger>
<Trigger Property="IsPressed" Value="True" />
<Trigger Property="IsEnabled" Value="False" />
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Обратите внимание на новый Setter
который устанавливает Background
на ваш ресурс и внутренний TemplateBinding
на Rectangle.Fill
,