繁体   English   中英

wpf StateChanged事件未触发

[英]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.ResizeModeNoResize ,我正在尝试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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM