C# WPF在MouseLeave事件上运行故事板

C# WPF在MouseLeave事件上运行故事板,c#,wpf,mouseevent,expression-blend,C#,Wpf,Mouseevent,Expression Blend,我正在写一个在工作中使用的应用程序来显示有用的信息。我的工作是对位于不同州的多个站点的计算机进行故障排除。该应用程序分为按钮列表(每个状态一个)和处于该状态的站点的子菜单列表框。按钮位于应用程序的左侧,列表框菜单在按钮的右侧打开。我已经模板化了菜单按钮和列表框,以保持一致性。在按钮鼠标上,一个故事板运行,显示站点列表框。如果鼠标在菜单上移动,菜单将保持打开状态,直到鼠标离开。问题是,如果鼠标没有进入菜单,只是在按钮上移动,则每个按钮菜单都会打开,但不会关闭,直到您将鼠标移到菜单上,然后离开。 菜

我正在写一个在工作中使用的应用程序来显示有用的信息。我的工作是对位于不同州的多个站点的计算机进行故障排除。该应用程序分为按钮列表(每个状态一个)和处于该状态的站点的子菜单列表框。按钮位于应用程序的左侧,列表框菜单在按钮的右侧打开。我已经模板化了菜单按钮和列表框,以保持一致性。在按钮鼠标上,一个故事板运行,显示站点列表框。如果鼠标在菜单上移动,菜单将保持打开状态,直到鼠标离开。问题是,如果鼠标没有进入菜单,只是在按钮上移动,则每个按钮菜单都会打开,但不会关闭,直到您将鼠标移到菜单上,然后离开。 菜单只能在调用它的按钮或菜单本身上方打开,并在输入其他按钮时关闭。我考虑了一个条件,如果鼠标未在“按钮1或菜单1”上方,则关闭每个按钮/菜单组合的“菜单1”,依此类推,但我不确定如何操作


我原以为可以用我的ListBox风格的multitrigger来完成,但我不确定该怎么做。我可以执行MouseLeave事件触发器,但不确定如何声明鼠标未位于菜单中的按钮上方。我对编程非常陌生,非常希望得到一些帮助。

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

  • 首先。您应该将一些属性绑定到按钮和列表框菜单
    IsMouseOver
    properties
  • 第二。在每个按钮中,您应该在
    Style.Triggers中添加
    Style
    MultiDataTrigger
    ,如下所示。这里的
    Butt1IsMouseOver
    Menu1IsMouseOver
    是这些绑定属性

    <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>
    
    
    


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

      • 首先。您应该将一些属性绑定到按钮和列表框菜单
        IsMouseOver
        properties
      • 第二。在每个按钮中,您应该在
        Style.Triggers中添加
        Style
        MultiDataTrigger
        ,如下所示。这里的
        Butt1IsMouseOver
        Menu1IsMouseOver
        是这些绑定属性

        <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>
        
        
        


      感谢您的回复。我一直在绞尽脑汁想弄明白这一点。我真的很感激你的帮助!!!我发现另一个方法是做基本相同的事情。我在网格内制作了一个菜单,编辑了模板并做了一些造型。然后,为了使其向右打开而不是向下打开,我编辑了子菜单项的副本,并设置了position=“right”。做我想做的,但没有动画。我仍在努力,因为我认为这是个好主意。谢谢你的回复。我一直在绞尽脑汁想弄明白这一点。我真的很感激你的帮助!!!我发现另一个方法是做基本相同的事情。我在网格内制作了一个菜单,编辑了模板并做了一些造型。然后,为了使其向右打开而不是向下打开,我编辑了子菜单项的副本,并设置了position=“right”。做我想做的,但没有动画。我仍在努力,因为我认为这是个好主意。