【问题标题】:WPF Trigger not working because of other trigger由于其他触发器,WPF 触发器无法正常工作
【发布时间】:2019-02-24 10:43:20
【问题描述】:

我有一个有两个触发器的按钮。 一个在IsMouseOver 上,另一个在 mouseClick 上。

如果我将IsMouseOver 注释掉,另一个则完全正常,但如果我同时使用两者,则 mouseClick 将被忽略。

这是我的触发器:

<ControlTemplate.Triggers>
    <Trigger Property="local:MouseDownHelper.IsMouseLeftButtonDown"
             Value="True">
        <Trigger.EnterActions>
            <BeginStoryboard>
                <Storyboard>
                    <ColorAnimation Duration="00:00:00.100"
                                    Storyboard.TargetName="SendReportsButtonMainGrid"
                                    Storyboard.TargetProperty="Background.Color"
                                    To="{StaticResource ClickGray}" />
                </Storyboard>
            </BeginStoryboard>
        </Trigger.EnterActions>
        <Trigger.ExitActions>
            <BeginStoryboard>
                <Storyboard>
                    <ColorAnimation Duration="00:00:00.100"
                                    Storyboard.TargetName="SendReportsButtonMainGrid"
                                    Storyboard.TargetProperty="Background.Color"
                                    To="{StaticResource HoverGray}" />
                </Storyboard>
            </BeginStoryboard>
        </Trigger.ExitActions>
    </Trigger>
    <Trigger Property="IsMouseOver"
             Value="True">
        <Trigger.EnterActions>
            <BeginStoryboard>
                <Storyboard>
                    <ColorAnimation Duration="00:00:00.400"
                                    Storyboard.TargetName="SendReportsButtonMainGrid"
                                    Storyboard.TargetProperty="Background.Color"
                                    To="{StaticResource HoverGray}" />
                </Storyboard>
            </BeginStoryboard>
        </Trigger.EnterActions>
        <Trigger.ExitActions>
            <BeginStoryboard>
                <Storyboard>
                    <ColorAnimation Duration="00:00:00.800"
                                    Storyboard.TargetName="SendReportsButtonMainGrid"
                                    Storyboard.TargetProperty="Background.Color"
                                    To="{StaticResource HeaderGray}" />
                </Storyboard>
            </BeginStoryboard>
        </Trigger.ExitActions>
    </Trigger>
</ControlTemplate.Triggers>

MouseDownHelper 来自there,据说它可以在没有其他触发器的情况下工作。

如果单击按钮,我怎样才能获得 OnHover 效果和另一个效果?

编辑: 您也可以使用同样不起作用的 IsPressed。

【问题讨论】:

  • 您没有显示 MouseDownHelper 代码,所以可能没问题,但您是否尝试在 IsPressed 属性上触发?
  • 我试过了,也没用。

标签: c# wpf triggers


【解决方案1】:

我找到了使用StopStoryboard 的解决方案。

单击时我还添加了第二个动画,我使用的是 onEnter 和 onLeave 而不是 onHover。

<ControlTemplate.Triggers>
    <Trigger Property="local:MouseDownHelper.IsMouseLeftButtonDown"
             Value="True">
        <Trigger.EnterActions>
            <StopStoryboard BeginStoryboardName="StoryboardEnter"/>
            <BeginStoryboard>
                <Storyboard>
                    <ColorAnimation Duration="00:00:00.000"
                                    Storyboard.TargetName="SendReportsButtonMainGrid"
                                    Storyboard.TargetProperty="Background.Color"
                                    To="{StaticResource HoverGray}" />
                    <ColorAnimation Duration="00:00:00.100"
                                    Storyboard.TargetName="SendReportsButtonMainGrid"
                                    Storyboard.TargetProperty="Background.Color"
                                    To="{StaticResource ClickGray}" />
                </Storyboard>
            </BeginStoryboard>
        </Trigger.EnterActions>
        <Trigger.ExitActions>
            <BeginStoryboard>
                <Storyboard>
                    <ColorAnimation Duration="00:00:00.100"
                                    Storyboard.TargetName="SendReportsButtonMainGrid"
                                    Storyboard.TargetProperty="Background.Color"
                                    To="{StaticResource HoverGray}" />
                </Storyboard>
            </BeginStoryboard>
        </Trigger.ExitActions>
    </Trigger>
    <EventTrigger RoutedEvent="MouseEnter">
        <BeginStoryboard Name="StoryboardEnter">
            <Storyboard>
                <ColorAnimation Duration="00:00:00.200"
                                Storyboard.TargetName="SendReportsButtonMainGrid"
                                Storyboard.TargetProperty="Background.Color"
                                To="{StaticResource HoverGray}" />
            </Storyboard>
        </BeginStoryboard>
    </EventTrigger>
    <EventTrigger RoutedEvent="MouseLeave">
        <BeginStoryboard>
            <Storyboard>
                <ColorAnimation Duration="00:00:00.400"
                                Storyboard.TargetName="SendReportsButtonMainGrid"
                                Storyboard.TargetProperty="Background.Color"
                                To="{StaticResource HeaderGray}" />
            </Storyboard>
        </BeginStoryboard>
    </EventTrigger>
</ControlTemplate.Triggers>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-25
    • 2015-12-02
    • 1970-01-01
    • 2012-01-04
    • 1970-01-01
    • 1970-01-01
    • 2017-08-04
    相关资源
    最近更新 更多