如何隐藏WPF窗口图标并使用ResizeMode = NoResize?

时间:2016-10-21 12:30:12

标签: c# wpf

我最近实施了this question的解决方案来隐藏WPF窗口的图标。我发现当该解决方案与ResizeMode=NoResize一起使用时,应用程序的标题栏上下文菜单无法禁用最小/最大/调整大小选项。

奇怪的是上下文菜单没有错误地启用某些选项,它只是在隐藏图标之前离开上下文菜单的状态。我发现这是使用一个简单的测试应用程序,可以进行必要的调用来隐藏图标,并可以动态更新Window的ResizeMode

显示的图标,ResizeMode = CanResize

标题栏按钮和上下文菜单是正确的。

enter image description here

隐藏图标,ResizeMode = CanResize

仍然正确

enter image description here

隐藏图标,ResizeMode = NoResize

标题栏按钮被正确隐藏,但上下文菜单保留了之前的状态。如果我切换到CanMinimize然后切换到NoResize,则上下文菜单只会启用“最小化”。

enter image description here

当可调整大小的WPF窗口启动另一个设置为NoResize的窗口(并且您正在隐藏图标)时,这会成为一个问题。

问题

是否有其他Windows API函数可以强制上下文菜单重新评估其状态? NoResize选项可能导致这种奇怪的行为?因为这只影响NoResize选项,WPF级别是否有解决方法?

编辑 - 我的目标是避免使用WindowStyle=ToolWindowWS_EX_TOOLWINDOW扩展窗口样式。我在过去发现了一些窗口样式的问题,一个被描述为on this question。我对这整个方法的目标之一是模仿ToolWindow的外观,而不必实际使用它。

1 个答案:

答案 0 :(得分:1)

使用.NET 4.0和Windows 8.1 Enterprise(我不知道它是否适用于其他.NET版本或其他操作系统),您只需使用WS_EX_TOOLWINDOW扩展样式而不是{{1}一个。

所以代码将是:

WS_EX_DLGMODALFRAME

我们希望它可以帮到你。