[英]wpf StateChanged Event is not firing
如果按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>
如果我钩住消息循环并对其进行调试,那么我永远都不会使用“ NoResize”进入Win + D
IntPtr mainWindowPtr = new WindowInteropHelper(sender as Window).Handle;
HwndSource mainWindowSrc = HwndSource.FromHwnd(mainWindowPtr);
mainWindowSrc.AddHook(Hook);
但是,如果我使用Microsoft Spy ++进行监视,则Win + D上会出现WM_WINDOWPOSCHANGED消息
怎么了? 以及我如何捕获此消息/事件?
当您按Windows + D时 , 不会调整应用程序Window
大小,因此没有理由StateChanged
事件。 您可以通过运行应用程序并按ALT + 空格键查看“ Window
状态”选项来验证这一点。 您会注意到,最大化,最小化和还原的选项显示为灰色,这意味着无法选择它们。
那是因为你设置的ResizeMode
属性NoResize
并会解释为什么你得到不同的结果,当它被设置为CanResize
。 因此,操作系统在按Windows + D时隐藏Window
的任何操作都不会涉及调整它们的大小。
有同样的情况。
Window.ResizeMode
为NoResize
,我正在尝试Show()
,然后Hide()
Minimized
窗口编程。
即使我在代码中更改WindowState
属性,事件也不会在Hide()
上触发(但会在Show()
顺便触发)。
就我而言,我自己开了火,对我有用。
public new void Hide()
{
Dispatcher.Invoke(() =>
{
base.Hide();
WindowState = WindowState.Minimized;
base.OnStateChanged(new EventArgs());
});
}
public new void Show()
{
Dispatcher.Invoke(() =>
{
base.Show();
base.Topmost = true;
WindowState = WindowState.Normal;
});
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.