TargetType与元素类型不匹配

Mar*_*hal 7 wpf xaml

我有一个简单的按钮样式的定义TargetTypeButton; 但是将样式设置为按钮会给出一个例外.

<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'的类型不匹配.


此外,设置TargetTypeControl删除运行时错误,但按钮的视觉样式在获取时不会更改Focus.


样式设置为时有效 Button.Style


编辑 我有两个具体问题:

  1. 我同意这样的事实:FocusVisualStyle是的属性FrameworkElementFrameworkContentElement,但是,为什么会出现错误把它放在按钮尽管样式是namedstyle而不是typedstyle

  2. 为什么不FocusVisualStyle渲染Button?是Button.FocusVisualStyle由像模板,触发器或模板触发任何更高的优先级值超过内部缠身?

Mik*_*son 6

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)

  • 为了澄清,`FocusVisualStyle`不能影响`Button`的样式.它只增加了`Button`的现有风格.你遇到的问题是你试图将`Button`样式设置为`FocusVisualStyle`,它只接受`Control`样式.我希望我解释得那么好. (2认同)