这里所讲的互斥是两个窗口不同时存在,打开一,只显示一;点一相关按钮显示二,关闭一;关闭二,显示一。


窗口一: historywinResult winChoice = new winResult();winChoice.Owner = this;winChoice.IsShow = true;winChoice.Activate();winChoice.Update();history.hide();
窗口二:if (this.Owner != null&&Owner.Name=="history"){Owner.Show();}

以下是一些窗口常见问题:

关于子窗体的层级关系总结一下哈,希望能对大家有些帮助 假设有这样两个窗体:RootWindow,SubWindow,在RootWindow中引发某事件而显示SubWindow

1,如果弹出窗体(比如SubWindow)仅仅是调用Show方法,并且没有设置其Owner属性:

ClassRootWindow
{         void Foo()         {                    SubWindow sw = newSubWindow();                    sw.Show();         }
}

那么弹出窗体(SubWindow)和源窗体(如RootWindow)没有任何层级关系,也就是说不会以模态方式呈现(SubWindow不会阻挡用户 对RootWindow的操作)。SubWindow在Show出来时在RootWindow的上方,但用户可以通过鼠标点击等方式将 RootWindow带到SubWindow前方来而遮盖RootWindow的内容,也就是说,享有用户焦点的窗口将被带到最前方。并且 RootWindow和SubWindow的最小化与还原操作互不影响。

2,如果弹出窗体(比如SubWindow)调用Show方法,并且设置了其Owner属性:

ClassRootWindow
{        void Foo()
{
SubWindow sw = newSubWindow();
sw.Owner = this;
sw.Show();
}
}

那么弹出窗体(SubWindow)和源窗体(如RootWindow)将有着父子关系,也就是说,弹出窗体将永远在源窗体的上方,但并不是模式的,用户可以操作源窗体,当源窗体被最小化或还原的时候,弹出窗体也将随着最小化和还原,反之不成立。
3,如果弹出窗体(SubWindow)以ShowDialog的方式显示,并且没有设置其Owner属性:

 ClassRootWindow
{
voidFoo()
{
SubWindow sw = new SubWindow();
sw.ShowDialog();
}
}

弹出窗体将以模式的方式出现,但没有父子关系,弹出窗体将阻止用户对源窗体的操作,但点击源窗体时弹出窗体不会出现闪动效果。弹出窗体最小化时,源窗体会 随之最小化,但还原操作却不可以(很奇怪)。这里有一个值得注意的问题是:在此模式下,如果弹出窗体不在任务栏显示 (ShowInTaskBar==false),而源窗体显示在任务栏,用户的操作可能会导致弹出窗口被隐藏在源窗口背后而没办法切换出来(除非使用 Alt+TAB)。
4,如果弹出窗体(SubWindow)以ShowDialog的方式显示,并且设置了其Owner属性:

 Class RootWindow
{
void Foo()
{
SubWindow sw = newSubWindow();
sw.Owner = this;
sw.ShowDialog();}

弹出窗体将以模式的方式出现,并且有父子关系,弹出窗体将永远处于源窗体上方,弹出窗体将阻止用户对源窗体的操作,并且点击源窗体时弹出窗体会出现闪动效果。弹出窗体最小化或还原时,源窗体会随之最小化或还原

转载于:https://www.cnblogs.com/xietianjiao/p/5868909.html

WPF中两个窗口的互斥相关推荐

  1. WPF中用于嵌入其他进程窗口的自定义控件(AppContainer)

    原文:WPF中用于嵌入其他进程窗口的自定义控件(AppContainer) 版权声明:本文为博主原创文章,转载请注明作者和出处 https://blog.csdn.net/ZZZWWWPPP11199 ...

  2. [WPF]winfom中ShowWPF新窗口时TextBox等控件无法输入问题解决方法 .

    项目使用ElementHost方式加载WPF,刚才直接在WPF中使用Show,而不是ShowDialog新开窗口时,窗口中的控件无法输入,但可以直接粘贴. 原来是因为WinForm与WPF实现Inpu ...

  3. WPF中在XAML中实现数据类型转换的两种方法

    WPF中在XAML中实现数据类型转换的两种方法 原文:WPF中在XAML中实现数据类型转换的两种方法 熟悉数据绑定的朋友都知道,当我们在Model中获取一个对象的数据,常常需要对其进行数据转换后显示在 ...

  4. WPF中,如何将Vista Aero效果扩展到整个窗口

    WPF中,如何将Vista Aero效果扩展到整个窗口 原文:WPF中,如何将Vista Aero效果扩展到整个窗口   WPF中,如何将Vista Aero效果扩展到整个窗口             ...

  5. 了解 WPF 中的路由事件和命令

    目录 路由事件概述 WPF 元素树 事件路由 路由事件和组合 附加事件 路由命令概述 操作中的路由命令 命令路由 定义命令 命令插入 路由命令的局限 避免命令出错 超越路由命令 路由处理程序示例 要想 ...

  6. [WPF]WPF中材质制作——图片和矢量图之争

    如果要做下面这样的一个东西作为背景.你会如何做呢? 图1. 目标背景效果 方案一,用PS画出来.然后把这个PNG图片作为背景色.这个方案可以,但是如果想让这个线的颜色可配置呢?如何线的粗细不确定呢?无 ...

  7. WPF 中使用附加属性,将任意 UI 元素或控件裁剪成圆形(椭圆)

    原文:WPF 中使用附加属性,将任意 UI 元素或控件裁剪成圆形(椭圆) 版权声明:本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可.欢迎转载.使用.重新发布,但务必保 ...

  8. Windows Presentation Foundation (WPF)中的命令(Commands)简述

    Windows Presentation Foundation (WPF)中的命令(Commands)简述 原文:Windows Presentation Foundation (WPF)中的命令(C ...

  9. WPF中的命令(Command)

    这节来讲一下WPF中的命令(Command)的使用. [认识Command] 我们之前说过,WPF本身就为我们提供了一个基础的MVVM框架,本节要讲的命令就是其中一环,通过在ViewModel中声明命 ...

最新文章

  1. 替换不文明词语和非法字符
  2. pyinstaller打包venv(虚拟环境),.pyd文件,非.py文件打包
  3. 石墨烯可将硬盘容量提高十倍,剑桥在Nature子刊发表最新研究
  4. 在VMware环境Windows server 2003下测试磁盘阵列实验
  5. 电脑总是跳出错误报告
  6. django-反向解析-命名分组路由的反解
  7. Adobe Edge Animate --点击元件内部元素使元件其他元素发生改变
  8. java查询mongodb 嵌套,查询嵌套文件mongoDB
  9. MVC 5 + EF6 入门完整教程14 -- 动态生成面包屑导航
  10. 28.yii2 用户认证
  11. [USACO 6.4.2] Electric Fences
  12. HTTP 权威指南 阅读笔记
  13. 纤亿通带您了解生活小妙招--构建家庭网络指南
  14. 【EXLIBRIS】#小词旮旯# 000 初衷
  15. cp命令—Linux文件管理
  16. JSP是什么?JSP是什么意思?
  17. 【python爬虫】easyocr识别gif图片文字
  18. SQLServer按照每小时、半小时分组
  19. 初创游戏企划草案经验谈
  20. 异常Required request body is missing。

热门文章

  1. vue router children 路由变了 组件没变_Vue.js从零开始——路由(2)
  2. 计算机课程中lnA怎么打,《计算机基础》考试模拟题(含答案)
  3. uniapp苹果底部栏自适应配置
  4. android跳蚤市场的功能,基于Android校园跳蚤市场设计与实现.doc
  5. linux .run文件_Linux快捷键及目录结构
  6. vue 页面url参数_Vue下URL地址栏参数改变却不能刷新界面
  7. 计算机课奖金计算步骤,计算机二级excel真题:计算员工奖金
  8. 禅道xampp文件夹无法删除_无法删除文件解决方案
  9. docker启动nginx后挂了_学员整理笔记系列8 启动docker后运行不了vmware该怎么办?...
  10. php 清除指定session,PHP如何操作指定的session?