从任务栏图标最小化还原时未激活无边框窗口激活事件

时间:2017-07-18 11:58:29

标签: c# .net wpf windows event-handling

我的borderless window调整大小模式设置为canMinimize

WindowStyle="None" 
ResizeMode="CanMinimize" 

当我将window state更改为最小化时,点击某个按钮并从任务栏图标恢复,然后触发了窗口的激活事件。

但是当我从任务栏图标最小化窗口并从任务栏图标恢复时,单击然后我的窗口不会激活激活的事件。

1 个答案:

答案 0 :(得分:5)

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

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

  • WM_ACTIVATEMSDNwParam包含WA_INACTIVE + 未最小化

接下来是:

  • WM_ACTIVATE wParam包含WA_ACTIVE + 最小化

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

    {li> WM_ACTIVATE wParam包含WA_ACTIVE + 未最小化

但由于窗口“已经”已经激活,因此不会发生Activated事件。 我认为这是一个Windows'错误(为什么我们会收到WA_ACTIVE状态,即使窗口被最小化了?)也许你可以向微软询问这个问题。

要解决此问题,您可以使用StateChanged事件并检查窗口的状态(WindowState.MinimizedWindowsState.Normal)。