<Button Name="btn1" Content="Button" Width="65" Height="45" Background="Green" Margin="1,1,0,1" FontWeight="Bold">
<Button.Style>
<Style>
<Style.Triggers>
<Trigger Property="Button.IsMouseOver" Value="True">
<Setter Property="Button.Background" Value="Yellow" />
</Trigger>
</Style.Triggers>
</Style>
</Button.Style>
<Button.LayoutTransform>
<RotateTransform Angle="270"/>
</Button.LayoutTransform>
</Button>
但它仍然不起作用...我想要的是它应该保持它给出的背景颜色(每个按钮不同),所以问题是:我是否必须为每个按钮一次又一次地定义它按钮(触发器不起作用,颜色变成冰蓝色)或者我可以在资源文件中使用通用值定义它,它可以停止颜色更改,也可以只设置现有属性的背景 编辑:只是要清楚,我希望按钮停止在鼠标悬停时更改其颜色,并保留我指定的任何颜色.....
答案 0 :(得分:1)
根据评论和我发布的SO帖子:该文章将样式应用于Button
类型的任何内容,这就是为什么它适用于所有按钮(这不一定是坏事)。但要从该文章中删除的重点是,您需要修改的是ControlTemplate
。
所以你想要做这样的事情:
<Style x:Key="ButtonStyle1" TargetType="{x:Type Button}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Border x:Name="Chrome" BorderBrush="Black" BorderThickness="2" CornerRadius="2" Background="{TemplateBinding Property=Background}">
<ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
这并不完美,因为它失去了它的所有交互性(即,你无法告诉你已经推动它,盘旋它或任何东西)。但它为你提供了一个很好的起点。
这里的一个关键点是Background
的{{1}}属性绑定到Border
,这意味着它将读取按钮的背景属性是模板并使用它的背景颜色。这使您可以更轻松地使用单一样式覆盖所有5个按钮。您可以(也可能想)使用TemplateParent Property=Background
属性执行类似的操作。
另请注意我的样式有BorderBrush
值,所以为了使用它,你会这样做:
x:Key
您可以删除 <Button x:Name="btn1" Content="Button" Width="65" Height="45" Background="Green" Margin="1,1,0,1" FontWeight="Bold" Style="{DynamicResource ButtonStyle1}">
<Button.LayoutTransform>
<RotateTransform Angle="270"/>
</Button.LayoutTransform>
</Button>
属性,该样式确实适用于您声明资源的任何容器内的所有按钮。