wpf StateChanged事件未触发

时间:2014-12-23 13:00:00

标签: c# wpf

如果我按下Win + D,则StateChanged事件不会触发,但如果ResizeMode是CanResize,则会触发StateChanged事件。

<Window x:Class="WpfApplication3.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525" WindowStyle="None" ResizeMode="NoResize" WindowState="Maximized">
<Grid>
</Grid>

如果我挂钩消息循环并进行调试,我永远不会使用&#34; NoResize&#34;

进入Win + D
IntPtr mainWindowPtr = new WindowInteropHelper(sender as Window).Handle;
HwndSource mainWindowSrc = HwndSource.FromHwnd(mainWindowPtr);
mainWindowSrc.AddHook(Hook);

但如果我使用Microsoft Spy ++进行间谍活动,Win + D上会有一条WM_WINDOWPOSCHANGED消息

有什么问题?我怎样才能抓住这个消息/事件?

2 个答案:

答案 0 :(得分:1)

当您按 Windows + D 时,您的应用程序Window 正在调整大小,因此没有理由{ {1}}要触发的事件。您可以通过运行应用程序并按 ALT + Space 来查看StateChanged状态选项来验证这一点。您会注意到最大化,最小化和还原的选项是灰色的,这意味着它们无法被选中。

这是因为您已将Window属性设置为ResizeMode,并解释了为什么在设置为NoResize时会得到不同的结果。因此,无论操作系统在按下 Windows + D 时隐藏CanResize的操作,都不会涉及调整它们的大小。

答案 1 :(得分:0)

得到同样的情况。

$res = DB::query() ->from(DB::raw('(SELECT *, (select count(*) from `comments` where parent_id=b._id) as cnt FROM `comments` b) x')); Window.ResizeMode,我正在尝试NoResize,然后Show() Hide()窗口进行编程。

即使我更改了代码中的Minimized属性,事件也未在WindowState上触发(但已在Hide() btw上触发。)

在我的情况下,我自己解雇了它,它适用于我。

Show()