从任务栏图标最小化还原时,不会触发无边界窗口激活事件

Ama*_*eth 3 .net c# windows wpf event-handling

我将borderless window尺寸调整模式设置为canMinimize

WindowStyle="None" 
ResizeMode="CanMinimize" 
Run Code Online (Sandbox Code Playgroud)

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

但是,当我从任务栏图标最小化窗口并从任务栏图标还原时,则我的窗口不会触发激活的事件。

dym*_*oid 5

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

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

  • WM_ACTIVATEMSDN)中wParam包含WA_INACTIVE+的符号未最小化

其次是:

  • WM_ACTIVATEwParam含有WA_ACTIVE+ 最小化

Activated即使实际上已将窗口最小化,这WA_ACTIVE也会导致WPF窗口引发事件(再次看到该状态?)。再次单击任务栏图标时,该窗口将被还原并收到以下消息:

  • WM_ACTIVATEwParam含有WA_ACTIVE+ 没有最小化

但是由于窗口“已”已经激活,因此不会发生任何Activated事件。我将其视为Windows的错误(即使窗口最小化,为什么我们仍会收到WA_ACTIVE状态?)也许您可以向Microsoft询问。

为了克服这个问题,您可以改用StateChanged事件并检查窗口的状态(WindowState.Minimizedvs. WindowsState.Normal)。