WPF触发器和样式

WPF触发器和样式,wpf,triggers,Wpf,Triggers,我有一个UserControl,在参考资料部分我有如下代码 <Style TargetType="{x:Type Viewbox}"> <Style.Triggers> <Trigger Property="Viewbox.IsMouseOver" Value="True"> <Setter Property="Viewbox.Effect" >

我有一个UserControl,在参考资料部分我有如下代码

    <Style TargetType="{x:Type Viewbox}">

        <Style.Triggers>
            <Trigger Property="Viewbox.IsMouseOver" Value="True">
                <Setter Property="Viewbox.Effect" >
                    <Setter.Value>
                        <DropShadowEffect Color="DarkGray" Direction="45" BlurRadius="30"></DropShadowEffect>
                    </Setter.Value>
                </Setter>
            </Trigger>
        </Style.Triggers>
    </Style>

这适用于我在控件中的ViewBox

但当我这么做的时候

<Viewbox.Triggers>
        <Trigger Property="Viewbox.IsMouseOver" Value="True">
            <Setter Property="Viewbox.Effect" >
                <Setter.Value>
                    <DropShadowEffect></DropShadowEffect>
                </Setter.Value>
            </Setter>
        </Trigger>
    </Viewbox.Triggers>

在视图框中,我得到错误


有没有一种方法可以在不使用样式的情况下将本地触发器添加到ViewBox?

框架元素与样式和模板的触发器集合接受不同类型的触发器。对于FrameworkElement.Triggers,您只能使用EventTrigger,它通常用于启动动画。Style、ControlTemplate和DataTemplate触发器集合可以像您使用的那样使用更常见的触发器和DataTrigger。这是一个奇怪的设置,总是感觉像一个未完成的功能。您可以将代码更改为使用故事板从EventTrigger为DropShadowEffect上的属性设置动画,或者只使用样式方法。

from

触发器的集合 只建立在一个元素上 支持EventTrigger,不支持属性 触发器(触发器)。如果你需要 属性触发器,您必须放置 它们位于样式或模板中,并且 然后将该样式或模板指定给 元素可以直接通过 样式属性,或间接 通过隐式样式引用