【问题标题】:Why doesn't my EventTrigger work for my left click? [duplicate]为什么我的 EventTrigger 不适用于我的左键单击? [复制]
【发布时间】:2019-10-16 09:12:33
【问题描述】:

所以我正在尝试为我的风格设置一个 EventTrigger,它似乎只注册了MouseOver 事件而不是MouseDownone。我不确定为什么。

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

    <Style TargetType="{x:Type Button}" x:Key="KiwiButton">
        <!--<Setter Property="Background" Value="#2ecc71"/>-->
        <Setter Property="Foreground" Value="White"/>
        <Setter Property="FontFamily" Value="Fonts/#Roboto"/>


        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Button}">
                    <Border Background="{TemplateBinding Background}">
                        <ContentPresenter Content="{TemplateBinding Content}" HorizontalAlignment="Center" VerticalAlignment="Center">


                        </ContentPresenter>
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>



        <Style.Triggers>
            <EventTrigger RoutedEvent="MouseEnter">
                <EventTrigger.Actions>
                    <BeginStoryboard>
                        <Storyboard>
                            <ColorAnimation Duration="0:0:0.2"
                                            Storyboard.TargetProperty="Background.Color"
                                            To="#27ae60" />
                        </Storyboard>
                    </BeginStoryboard>
                </EventTrigger.Actions>
            </EventTrigger>


            <EventTrigger RoutedEvent="MouseLeave">
                <EventTrigger.Actions>
                    <BeginStoryboard>
                        <Storyboard>
                            <ColorAnimation Duration="0:0:0.2"
                                            Storyboard.TargetProperty="Background.Color"
                                            To="#2ecc71" />
                        </Storyboard>
                    </BeginStoryboard>
                </EventTrigger.Actions>
            </EventTrigger>


            <EventTrigger RoutedEvent="MouseDown">  
                <EventTrigger.Actions>
                    <BeginStoryboard>
                        <Storyboard>
                            <ColorAnimation Duration="0:0:0.2"
                                            Storyboard.TargetProperty="Background.Color"
                                            To="Orange" />
                        </Storyboard>
                    </BeginStoryboard>
                </EventTrigger.Actions>
            </EventTrigger>


            <EventTrigger RoutedEvent="MouseUp">
                <EventTrigger.Actions>
                    <BeginStoryboard>
                        <Storyboard>
                            <ColorAnimation Duration="0:0:0.2"
                                            Storyboard.TargetProperty="Background.Color"
                                            To="#27ae60" />
                        </Storyboard>
                    </BeginStoryboard>
                </EventTrigger.Actions>
            </EventTrigger>


        </Style.Triggers>

    </Style>

</ResourceDictionary>

【问题讨论】:

  • 如标记的重复项中所述,Button 控件的组件已经处理了MouseDown 事件,因此它无法返回触发器。有许多替代方案,包括仅使用 PreviewMouseDown 事件代替(也在标记的重复项中注明)。

标签: c# .net wpf xaml


【解决方案1】:

你可以试试PreviewMouseDown

【讨论】:

  • 成功了!我想知道为什么,我需要查找这两者之间的区别。
  • 由于您正在与框架 (WPF) 进行交互,很多事情在您不知情的情况下发生在幕后。您会在网上找到大量文档。请不要忘记将您的问题标记为“已回答”,祝您有美好的一天。
  • @Riley Varga 所有冒泡事件(没有前缀“Preview”的事件),尤其是输入事件,都被标记为由框架控件处理。已处理的事件在使事件被处理的元素处停止传播。这就是为什么其他控件也无法处理此事件的原因,除非您通过显式设置AddHandlerhandledEventsToo 参数来订阅路由事件
  • true 的方法。由于类处理程序的优先级高于实例处理程序,因此在实例处理程序将事件标记为已处理的情况下,类处理程序最终也会被调用。
猜你喜欢
  • 2018-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多