单击另一个按钮时,我尝试更改一个按钮的background
。
如果我为按钮提供样式,我就无法做到这一点。
请参阅下面的代码。
MainWindow.xaml
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<Style TargetType="Button" x:Key="TransparentButton">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border CornerRadius="2,2,2,2" HorizontalAlignment="Center" x:Name="borderTemplate" Background="Transparent">
<ContentPresenter/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="true">
<Setter TargetName="borderTemplate" Property="Border.BorderBrush" Value="Gray" />
<Setter TargetName="borderTemplate" Property="Border.BorderThickness" Value="1" />
</Trigger>
<Trigger Property="IsPressed" Value="true">
<Setter TargetName="borderTemplate" Property="Border.BorderBrush" Value="Lime" />
</Trigger>
<Trigger Property="IsFocused" Value="true">
<Setter TargetName="borderTemplate" Property="Border.Background" Value="#FD7" />
</Trigger>
<Trigger Property="IsEnabled" Value="false">
<Setter TargetName="borderTemplate" Property="Border.Background" Value="LightGray"></Setter>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
<Grid>
<Button Content="Button" Style="{StaticResource TransparentButton}" Height="23" HorizontalAlignment="Left" Margin="20,25,0,0" Name="button1" VerticalAlignment="Top" Width="75" />
<Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="143,177,0,0" Name="button2" VerticalAlignment="Top" Width="75" Click="button2_Click" />
</Grid>
</Window>
MainWindow.xaml.cs
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void button2_Click(object sender, RoutedEventArgs e)
{
//This doesn't work if i providing style to button ==> Style="{StaticResource TransparentButton}"
button1.Background = Brushes.Red;
}
}
感谢.....
答案 0 :(得分:16)
您的样式会重写Button的ControlTemplate,因此不再使用背景颜色
默认按钮模板如下所示:
<Button Background="SomeColor">
<Button.Content>
</Button>
你正在覆盖模板说
<Border>
<Button.Content>
</Border>
将ControlTemplate更改为
<Border Background="{TemplateBinding Background}">
<Button.Content>
</Border>
它会起作用
答案 1 :(得分:1)
看起来在模板(Background="Transparent"
)中定义的样式始终会覆盖您从代码后面提供的值。尝试将其从XAML
中删除,并在构造函数中将其定义为按钮的默认背景。只是为了检查。
一般来说,我不建议在后面的代码中执行此操作,而是在XAML
中移动此类逻辑。
答案 2 :(得分:1)
在这一行:
<Border CornerRadius="2,2,2,2" HorizontalAlignment="Center" x:Name="borderTemplate" Background="Transparent">
您将按钮的背景固定为透明。它不再链接到按钮控件的Background属性,因此更改该属性不再向下传播到样式。
如果使用“TemplatedParent”绑定,它将允许您重新连接控件和它的样式之间的链接 - 如下所示:
<Border CornerRadius="2,2,2,2" HorizontalAlignment="Center" x:Name="borderTemplate" Background="{Binding RelativeSoure={RelativeSource TemplatedParent}, Path=Background}">
然后你可以设置按钮的背景:
<Button Name="button1" Background="Transparent" ..... />