我有一个简单的按钮样式的定义TargetType的Button; 但是将样式设置为按钮会给出一个例外.
<Window>
<Window.Resources>
<Style x:Key="buttonStyle" TargetType="{x:Type Button}">
<Setter Property="Background" Value="Magenta"/>
</Style>
</Window.Resources>
<StackPanel Orientation="Horizontal">
<Button Content="1" FocusVisualStyle="{StaticResource buttonStyle}"/>
</StackPanel>
</Window>
Run Code Online (Sandbox Code Playgroud)
附加信息:'Button'TargetType与元素'Control'的类型不匹配.
此外,设置TargetType为Control删除运行时错误,但按钮的视觉样式在获取时不会更改Focus.
样式设置为时有效 Button.Style
编辑 我有两个具体问题:
我同意这样的事实:FocusVisualStyle是的属性FrameworkElement和FrameworkContentElement,但是,为什么会出现错误把它放在按钮尽管样式是namedstyle而不是typedstyle?
为什么不FocusVisualStyle渲染Button?是Button.FocusVisualStyle由像模板,触发器或模板触发任何更高的优先级值超过内部缠身?
a FocusVisualStyle允许您在控制重点时向用户提供视觉反馈.例如,添加一个Rectangle看起来像控件边框的内容.
A Style是控件本身的外观和感觉.这一切都在这里解释.
FocusVisualStyle它不是Button自己的风格,Button而是专注于它的风格.
有关更多信息,请参见此处
我想你所追求的是一个Trigger.
<Style x:Key="buttonStyle" TargetType="{x:Type Button}">
<Style.Triggers>
<Trigger Property="IsFocused" Value="True">
<Setter Property="Background" Value="Magenta"/>
</Trigger>
</Style.Triggers>
</Style>
Run Code Online (Sandbox Code Playgroud)
然后,你可以设置Style你的Button,如下:
<Button Style="{StaticResource buttonStyle}" ... />
Run Code Online (Sandbox Code Playgroud)