WPF在MouseLeave事件上运行故事板

时间:2015-11-11 18:34:20

标签: c# wpf mouseevent expression-blend

Application Menu image

我正在编写一个在工作中使用的应用程序来显示有用的信息。我的工作是对不同州的多个站点的计算机进行故障排除。应用程序分为按钮列表,每个状态一个,以及该状态的站点的子菜单列表框。按钮位于应用程序的左侧,ListBox菜单打开到按钮的右侧。我已经模仿了菜单按钮和列表框以获得一致性。 On Button MouseEnter一个故事板运行,显示站点的ListBox。如果鼠标在菜单上移动,菜单将保持打开状态,直到鼠标离开。问题是如果鼠标没有进入菜单并且只是移动按钮,则每个按钮菜单都会打开,但是在鼠标悬停在菜单上然后离开之前不会关闭。 菜单只应在调用它的按钮或菜单本身时打开,并在输入其他按钮时关闭。我想到了一个条件,如果鼠标没有超过“按钮1或菜单1”然后关闭“菜单1”,依此类推每个按钮/菜单组合,但我不知道该怎么做。

我认为可以用我的ListBox样式中的多重触发器来完成,但我不确定如何。我可以执行MouseLeave事件触发器但不确定如何声明鼠标不在菜单上的Button上。我对编程很陌生,非常想要一些帮助。

1 个答案:

答案 0 :(得分:0)

我认为不是最好的方式。但你可以试试这个。

  • 首先。您应该将一些属性绑定到按钮和列表框菜单IsMouseOver属性。
  • 二。在每个按钮中,您应该在Style中添加MultiDataTrigger Style.TriggersButt1IsMouseOverMenu1IsMouseOver是这些绑定属性。

    <Style.Triggers>
        <MultiDataTrigger>
            <MultiDataTrigger.Conditions>
                <Condition Binding="{Binding Butt1IsMouseOver}" Value="False" />
                <Condition Binding="{Binding Menu1IsMouseOver}" Value="False" />
            </MultiDataTrigger.Conditions>
            <MultiDataTrigger.EnterActions>
                <BeginStoryboard>
                    <Storyboard />
                    <!-- close animation -->
                </BeginStoryboard>
            </MultiDataTrigger.EnterActions>
            <MultiDataTrigger.ExitActions>
                <BeginStoryboard>
                    <Storyboard/>
                    <!-- open animation-->
                </BeginStoryboard>
            </MultiDataTrigger.ExitActions>
        </MultiDataTrigger>
    </Style.Triggers>