我的按钮样式如下:
<Style TargetType="Button" x:Key="BlackButton">
<Setter Property="Background" Value="Black"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="red" />
</Trigger>
</ControlTemplate.Triggers>
<ContentPresenter />
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
和一个按钮,其定义如下:
<Button Canvas.Left="19" Canvas.Top="520" Height="34" Width="107"
Style="{StaticResource BlackButton}" />
但是当我运行应用程序时,我看不到按钮。它的背景设置为无。
如果我改变风格如下:
<Style TargetType="Button" x:Key="BlackButton">
<Setter Property="Background" Value="Black"/>
</Style>
(删除模板)然后显示按钮,但其背景不会改变。
这个xaml代码有什么问题?
答案 0 :(得分:1)
您已重写控件的模板以设置MouseOver
触发器。这意味着你的控制模板是空的 - 因此没有为你的按钮绘制任何内容。
你可以通过将触发器移动到样式本身来解决这个问题,例如:
<Style TargetType="Button" x:Key="BlackButton">
<Setter Property="Background" Value="Black"/>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="red" />
</Trigger>
</Style.Triggers>
</Style>
但是,您现在可能遇到的是按钮的内置MouseOver
动画将覆盖您的红色背景。您将看到闪烁的红色,然后转换为默认的Windows颜色。解决这个问题的一种方法是获取默认Button
模板的完整副本(使用Expression Blend是最简单的方法)并从中删除动画。
答案 1 :(得分:0)
你的ControlTemplate
只是空的,尽管你有一个ControlPresenter
。但由于未设置Content
属性,因此它也是空的。要获得Background
,您必须添加Border
。
<Style TargetType="Button" x:Key="BlackButton">
<Setter Property="Background" Value="Black"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="red" />
</Trigger>
</ControlTemplate.Triggers>
<Border Background="{TemplateBinding Background}">
<ContentPresenter Content="{TemplateBinding Content}"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
这应该会告诉你一些事情。