Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 最小化从任务栏还原图标时未激发无边框窗口激活事件_C#_.net_Wpf_Windows_Event Handling - Fatal编程技术网

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