XAML WPF子菜单项在鼠标到达它们之前关闭

5w9g7ksd  于 2022-12-07  发布在  其他
关注(0)|答案(2)|浏览(170)

极少数人有这个问题,他们无法React的子菜单项目,因为它关闭太快之前,鼠标可以到达子菜单。添加了一个GIF在底部。我们不能重现这种行为,它似乎影响极少数人。

我们使用Hardcodet.wpf.TaskbarIcon来显示菜单。任何想法都将受到欢迎。下面是一个代码片段,我只演示了一个菜单项,但其他菜单项遵循相同的逻辑:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:tb="http://www.hardcodet.net/taskbar"
                    xmlns:local="clr-namespace:FreedomPlatform"
                    xmlns:converters="clr-namespace:FreedomPlatform.Converters">
    <BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter" />
    <converters:InverseBooleanConverter x:Key="InverseBooleanConverter" />
    <converters:InverseAndBooleanConverter x:Key="InverseAndBooleanConverter" />
    <Style TargetType="{x:Type MenuItem}">
        <Setter Property="HorizontalContentAlignment" Value="Left"/>
        <Setter Property="VerticalContentAlignment" Value="Center"/>
    </Style>
    <ContextMenu x:Key="FreedomTrayMenu" AutomationProperties.Name="Freedom">
        
        <MenuItem Header="Options">
            <MenuItem Header="Run on Startup" StaysOpenOnClick="True" IsCheckable="True" IsChecked="{Binding RunOnStartup}" IsEnabled="{Binding RunOnStartupModificationEnabled}" />
            
        </MenuItem>
        <Separator />
    </ContextMenu>
    
    <tb:TaskbarIcon x:Key="FreedomNotifyIcon"
                    IconSource="{Binding StatusIconPath}"
                    ContextMenu="{StaticResource FreedomTrayMenu}" MenuActivation="LeftOrRightClick" KeyUp="{Binding OnKeyUp}">
        
        <!-- Self-assign a data context (could also be done programmatically) -->
        <tb:TaskbarIcon.DataContext>
            <local:StatusViewModel />
        </tb:TaskbarIcon.DataContext>
    </tb:TaskbarIcon>
    
</ResourceDictionary>
5vf7fwbs

5vf7fwbs1#

尝试在父MenuItem上设置OnMouseLeave,如下所示

<ResourceDictionary ... 
    x:Class="ContextMenuHandler">
    <!--...-->
    <MenuItem Header="Options" MouseLeave="OnMouseLeave">
        <!--...-->
    </MenuItem>
    <!--...-->
</ResourceDictionary>

然后添加名为ContextMenuHandler.cs的类

public partial class ContextMenuHandler : ResourceDictionary
    {
        public void OnMouseLeave(object sender, EventArgs e)
        {

        }
    }
xienkqul

xienkqul2#

如果你想使用Hardcodet.Wpf.TaskbarIcon,请与编写TaskBarIcon的人交谈;)
如果没有,我建议你用System.Windows.Forms.NotifyIcon和写一些C#代码,here a question with a good answer,看到答案,接受,由Jesper Jensen
请注意,托盘中的图标是由Windows拥有的,WPF只是Windows exe的一个不同的UI,请注意,您可以通过C#代码使用NotifyIcon或Windows中任何您想要的东西。
NotifyIcon公开处理单击气球、图标、鼠标事件等的方法。

相关问题