【发布时间】:2017-03-03 18:30:53
【问题描述】:
我最近实现了来自this question 的解决方案来隐藏 WPF 窗口的图标。我发现当该解决方案与 ResizeMode=NoResize 结合使用时,应用程序的标题栏上下文菜单无法禁用 Min/Max/Resize 选项。
奇怪的是上下文菜单并没有错误地启用某些选项,它只是保留了图标隐藏之前的上下文菜单状态。我使用一个简单的测试应用程序发现了这一点,该应用程序可以进行必要的调用来隐藏图标,并且可以即时更新窗口的ResizeMode。
图标显示,ResizeMode=CanResize
标题栏按钮和上下文菜单正确。
图标隐藏,ResizeMode=CanResize
还是正确的
图标隐藏,ResizeMode=NoResize
标题栏按钮已正确隐藏,但上下文菜单保留其先前状态。如果我切换到CanMinimize,然后切换到NoResize,上下文菜单只会启用“最小化”。
当一个可调整大小的 WPF 窗口启动另一个设置为 NoResize 的窗口时(并且您正在隐藏图标),这将成为一个问题。
问题
是否有其他 Windows API 函数可以强制上下文菜单重新评估其状态? NoResize 选项可能会导致这种奇怪的行为吗?由于这只影响 NoResize 选项,是否有 WPF 级别的解决方法?
编辑 - 我的目标是避免使用 WindowStyle=ToolWindow 或 WS_EX_TOOLWINDOW 扩展窗口样式。过去我发现该窗口样式存在一些问题,其中一个是 on this question。我使用整个方法的一个目标是模拟ToolWindow 的外观,而无需实际使用它。
【问题讨论】:
-
您采用了哪种解决方案? o-tool-kit 还是 Sheridan 的?
-
一个组合。我做
SetWindowLong...SendMessage...SendMessage...SetWindowPos。只使用其中一个似乎不起作用。