C# 最小化从任务栏还原图标时未激发无边框窗口激活事件
我有一个C# 最小化从任务栏还原图标时未激发无边框窗口激活事件,c#,.net,wpf,windows,event-handling,C#,.net,Wpf,Windows,Event Handling,我有一个无边框窗口,其调整大小模式设置为canMinimize WindowStyle="None" ResizeMode="CanMinimize" 当我在某些按钮上将我的窗口状态更改为最小化时,单击并从任务栏图标还原,然后启动窗口的激活事件 但当我从任务栏图标最小化窗口并从任务栏图标单击恢复时,我的窗口不会触发激活事件。这与窗口样式无关。您也可以尝试其他样式,您将观察到相同的行为 底层窗口激活逻辑基于窗口的消息。 单击活动窗口的任务栏图标时,将向该窗口发送以下消息: WM_ACTIV
无边框窗口
,其调整大小模式设置为canMinimize
WindowStyle="None"
ResizeMode="CanMinimize"
当我在某些按钮上将我的窗口状态更改为最小化时,单击并从任务栏图标还原,然后启动窗口的激活事件
但当我从任务栏图标最小化窗口并从任务栏图标单击恢复时,我的窗口不会触发激活事件。这与窗口样式无关。您也可以尝试其他样式,您将观察到相同的行为
底层窗口激活逻辑基于窗口的消息。
单击活动窗口的任务栏图标时,将向该窗口发送以下消息:
WM_ACTIVATE
(),其中wParam
包含WA_INACTIVE
+未最小化
其次是:
WM_ACTIVATE
使用wParam
包含WA_ACTIVATE
+最小化
这会导致WPF窗口引发Activated
事件,即使该窗口实际上已最小化(请参见WA_ACTIVE
state?),当您再次单击任务栏图标时,该窗口将恢复并接收消息:
WM_ACTIVATE
带有wParam
包含WA_ACTIVATE
+未最小化
但由于窗口“已”处于活动状态,因此不会有激活的事件。
我认为它是Windows的bug(为什么我们会收到一个<代码> WAYActudio状态,即使窗口被最小化了吗?也许你可以问微软关于这个问题。
要解决此问题,您可以改用StateChanged
事件并检查窗口的状态(WindowState.Minimized
vs.WindowState.Normal
)