WindowStyle=None的WPF中的应用程序上下文菜单
本文关键字:应用程序 上下文 菜单 WPF None WindowStyle | 更新日期: 2023-09-27 18:21:51
我在自定义WPF窗口中遇到了一个非常奇怪的问题。窗口完全在WPF中设计,WindowStyle=None,ResizeMode=NoResize。因此,我必须重新实现所有基本的窗口处理功能,如移动、调整大小和应用程序上下文菜单。
目前,我正在调用应用程序图标和应用程序标题栏的鼠标事件中的上下文菜单,如下所示:
POINT point=new POINT();
GetCursorPos(out point);
IntPtr handle=GetSystemMenu(new WindowInteropHelper(this).Handle, false);
IntPtr hd=new WindowInteropHelper(this).Handle;
int retvalue=TrackPopupMenu(handle, TPM_RETURNCMD, (int)point.X, (int)point.Y, 0, hd, new IntPtr());
PostMessage(hd, WM_SYSCOMMAND, retvalue, 0);
这是一个你可以在网上找到的代码剪辑,看起来每个人都是这样做的。
然而,根据我用来显示菜单的事件,会发生以下情况:
鼠标上移:
- 右键单击标题栏/应用程序图标:显示应用程序上下文菜单
- 在不移动鼠标的情况下再次右键单击:不知何故,在窗口内生成了一个右键单击事件(而鼠标仍指向标题栏)
有趣的部分:点击被一个窗口一个窗口地翻译成。左边和窗户。顶部如果我正确放置了窗口,我可以在鼠标仍然指向波浪线的同时打开窗口内ListView的上下文菜单。
MouseDown:
- 右键单击标题栏/应用程序图标:显示应用程序上下文菜单
- 在不移动鼠标的情况下向上单击鼠标右键:同样的行为,在鼠标位置+窗口的窗口内生成右键单击。左侧/车窗顶部
我做了一个屏幕截图,测量了像素距离,以检查它是否真的是窗口。顶部/左侧。
这就是我在试图解决问题时所做的:
- 测试了对代码的数十项更改,以显示上下文菜单,但没有效果
- 我完全删除了窗口类中的调整大小/移动代码,没有任何更改
- 玩EventArgs。处理,没有变化
- 将在调度程序中截取的代码排队,而不是在事件中直接调用它,没有更改
您是否已经尝试在自定义窗口的xaml中实现上下文菜单?如果你正在使用Templates,你已经可以在那里集成它,或者在CustomWindow.xaml 中使用它
<'ControlName'.ContextMenu>
<ContextMenu>
<MenuItem Header="FooRoot">
<MenuItem Header="Foo" Command="{Binding FooCommand}"/>
</MenuItem>
<MenuItem Header="Foo2" Click="OnClick"/>
</ContextMenu>
</'ControlName'.ContextMenu>
您可以绑定该命令(可能是在使用MVVM模式的情况下)或为其生成事件。