zoukankan      html  css  js  c++  java
  • 关于WPF的弹出窗口

    几个重要的概念需要清楚:

    Show和ShowDialog区别

    1、调用Show方法后弹出子窗口后,线程会继续往下执行。调用ShowDialog方法弹出子窗口后,线程会阻塞,直到子窗口关闭才继续往下执行。

    2、ShowDialog弹出的子窗口会使父窗口不能获得焦点,必须先关闭子窗口才能关闭父窗口。Show则不会。

    3、在ShowDialog弹出的子窗口中设置DialogResult会关闭子窗口,父窗口可根据DialogResult的值做不同响应。

    Owner

     当设置了Owner,不管是点击任务栏切换还是TAB切换,子窗口都将永远保持在父窗口上层(最符合使用习惯)。

    如果不设置子窗口的Owner,就可能发生子窗口被父窗口遮挡,并且父窗口无法点击的严重BUG,所以弹出窗口时应该要首先设置子窗口的Owner属性。

    PS:不能将所有的窗口Owner都设置为App.Current.MainWindow,因为如果是第三级弹出子窗口,那么点击第二级子窗口时,第三级子窗口也会被遮挡。

    Topmost

    当Topmost=true时,窗口会置于桌面的最顶层,本软件的所有的窗口或其它软件的窗口都会被该窗口遮挡(这显然是不合理的)。

    所以,如果不是特殊需要,千万不要把Topmost设置为true。

    ShowInTaskbar

    默认为true,当设置为false的时候在任务栏看不到该窗口。

    总结

    因为WPF默认只有一个不带参的ShowDialog方法,为了防止弹出子窗口时忘记设置Owner属性,我们可以添加一个带参数的扩展方法。

    扩展方法:

        public static class DialogHelper
        {
            public static bool? ShowDialog(this Window win, Window owner)
            {
                win.Owner = owner;
                win.ShowInTaskbar = false;
                return win.ShowDialog();
            }
        }

     调用:

                var win = new WinA(); 
                win.ShowDialog(this);        
  • 相关阅读:
    VFL语言简洁
    TETeLasr Cutting System 开机回零问题
    TETELaser Cutting System 不连续吹起的问题
    C语言 printf 格式化输出函数
    kbhit()
    电子齿轮 电子凸轮
    memset
    .h(头文件) .lib(库文件) .dll(动态链接库文件) 之间的关系和作用的区分
    pdf点击超链接后返回:alt+ 向左 /向右
    关于 char 、 wchar_t 、 TCHAR 、 _T() ||| 宏 _T 、 TEXT 、 _TEXT 、 L
  • 原文地址:https://www.cnblogs.com/kavilee/p/9284810.html
Copyright © 2011-2022 走看看