我在自定义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);
这是一个你可以在网上找到的代码剪切,看起来每个人都这样做。
但是,根据我用来显示菜单的事件,会发生以下情况:
的MouseUp:
有趣的部分:Click通过window.Left和window.Top翻译成窗口。如果我正确放置窗口,我可以在窗口内打开ListView的上下文菜单,同时鼠标仍然指向tilebar。
的MouseDown:
我制作了截图并测量了像素距离,以检查它是否真的是窗口。顶部/左侧。
这是我在尝试解决问题时所做的事情:
答案 0 :(得分:0)
您是否已尝试在自定义窗口的xaml中实现上下文菜单?如果您正在使用模板,则可以将其集成到那里或在CustomWindow.xaml中使用它
<'ControlName'.ContextMenu>
<ContextMenu>
<MenuItem Header="FooRoot">
<MenuItem Header="Foo" Command="{Binding FooCommand}"/>
</MenuItem>
<MenuItem Header="Foo2" Click="OnClick"/>
</ContextMenu>
</'ControlName'.ContextMenu>
您可以绑定命令(可能在您使用MVVM模式时)或为其创建事件。