从任务栏图标最小化和恢复时,无边框窗口激活事件未触发

6

我有一个无边框窗口,并将调整大小模式设置为canMinimize

WindowStyle="None" 
ResizeMode="CanMinimize" 

当我通过某个按钮点击将我的 window state 更改为最小化,并从任务栏图标恢复时,窗口的 activated 事件会被触发。

但是当我通过任务栏图标将窗口最小化并从任务栏图标单击进行恢复时,我的窗口不会触发 activated 事件。

1个回答

7

这与窗口样式无关。您也可以尝试其他样式,您将观察到相同的行为。

底层的窗口激活逻辑基于Windows消息。当您单击活动窗口的任务栏图标时,将向窗口发送以下消息:

  • WM_ACTIVATE (MSDN),其中wParam包含WA_INACTIVE+ 未最小化

接下来是:

  • WM_ACTIVATE,其中wParam包含WA_ACTIVE+ 最小化

这会导致WPF窗口引发Activated事件,即使窗口实际上已被最小化(看到WA_ACTIVE状态了吗?)当您再次单击任务栏图标时,窗口将被恢复并将接收消息:

  • WM_ACTIVATE,其中wParam包含WA_ACTIVE+ 未最小化

但由于窗口已经处于活动状态,所以不会触发Activated事件。我认为这是Windows的一个错误(为什么即使窗口最小化了,我们仍会收到WA_ACTIVE状态?)也许您可以向Microsoft咨询此事。

为了解决这个问题,您可能需要使用StateChanged事件,然后检查窗口的状态(WindowState.Minimized vs. WindowsState.Normal)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接