我有一个无边框窗口,并将调整大小模式设置为canMinimize
WindowStyle="None"
ResizeMode="CanMinimize"
当我通过某个按钮点击将我的 window state
更改为最小化,并从任务栏图标恢复时,窗口的 activated 事件会被触发。
但是当我通过任务栏图标将窗口最小化并从任务栏图标单击进行恢复时,我的窗口不会触发 activated 事件。
我有一个无边框窗口,并将调整大小模式设置为canMinimize
WindowStyle="None"
ResizeMode="CanMinimize"
当我通过某个按钮点击将我的 window state
更改为最小化,并从任务栏图标恢复时,窗口的 activated 事件会被触发。
但是当我通过任务栏图标将窗口最小化并从任务栏图标单击进行恢复时,我的窗口不会触发 activated 事件。
这与窗口样式无关。您也可以尝试其他样式,您将观察到相同的行为。
底层的窗口激活逻辑基于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
)。