WPF中两个窗口的互斥
这里所讲的互斥是两个窗口不同时存在,打开一,只显示一;点一相关按钮显示二,关闭一;关闭二,显示一。
窗口一: history
winResult 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();
}
弹出窗体将以模式的方式出现,并且有父子关系,弹出窗体将永远处于源窗体上方,弹出窗体将阻止用户对源窗体的操作,并且点击源窗体时弹出窗体会出现闪动效果。弹出窗体最小化或还原时,源窗体会随之最小化或还原
WPF中两个窗口的互斥的更多相关文章
- VS编程,WPF中两个滚动条 ScrollViewer 同步滚动的一种方法
原文:VS编程,WPF中两个滚动条 ScrollViewer 同步滚动的一种方法 版权声明:我不生产代码,我只是代码的搬运工. https://blog.csdn.net/qq_43307934/ar ...
- 如何监视 WPF 中的所有窗口,在所有窗口中订阅事件或者附加 UI
原文:如何监视 WPF 中的所有窗口,在所有窗口中订阅事件或者附加 UI 由于 WPF 路由事件(主要是隧道和冒泡)的存在,我们很容易能够通过只监听窗口中的某些事件使得整个窗口中所有控件发生的事件都被 ...
- 【.net 深呼吸】WPF 中的父子窗口
与 WinForm 不同,WPF 并没有 MDI 窗口,但 WPF 的窗口之间是可以存在“父子”关系的. 我们会发现,Window 类公开了一个属性叫 Owner,这个属性是可读可写的,从名字上我们也 ...
- C# 在winform或者wpf中显示控制台窗口
这儿需要使用两个系统函数: BOOL WINAPI FreeConsole(void); //// 关闭控制台窗口,参考:http://msdn.microsoft.com/en-us/library ...
- WinForm 中两个窗口之间传递数据
方法有很多种,这里介绍项目中使用的两种 一.通过委托+事件的方法进行传值 (点击Form2中的button1按钮,将会把Form2中的textbox.text 传给Form1中的 lable.text ...
- WPF中实现登陆窗口的“记住帐号”功能
1.在Login.xaml中添加资源: <XmlDataProvider x:Key="XmlDataProvider" Source="pack://applic ...
- WPF 中保存 window(窗口)或者canvas成图片
最近需要用到这个功能,搜了一下不少代码有问题 ,找到一个效果比较好的,支持多级子元素 记一下. private void button_save_window_Click(object sender, ...
- WPF中利用后台代码实现窗口分栏动态改变
在WPF中实现窗口分栏并能够通过鼠标改变大小已经非常容易,例如将一个GRID分成竖排三栏显示,就可以将GRID先分成5列,其中两个固定列放GridSplitter. <Grid Backgrou ...
- C# WPF 中WebBrowser拖动来移动窗口,改变窗口位置
前言 wpf中的WebBrowser相比之前的winform阉割了不少东西,也增加了不少东西,但是msdn对wpf也没有较好的文档 WebBrowser可以说是一个.NET控件,相对于WPF中的控件, ...
随机推荐
- bzoj4152 [AMPPZ2014]The Captain
最短路,先将x排序,然后把排序后权值相邻的点连边,再把y排序,也把权值相邻的点连边,求一遍1到n的最短路就好啦. 代码 #include<cstdio> #include<queue ...
- php session 跨子域和跨服务器解决方式
Session主要分两部分: 一个是Session数据,该数据默认情况下是存放在服务器的tmp文件下的,是以文件形式存在 另一个是标志着Session数据的Session Id,Sess ...
- spark history-server的使用
为什么需要historyServer? 在运行Spark Application的时候,Spark会提供一个WEBUI列出应用程序的运行时信息:但该WEBUI随着Application的完成(成功/失 ...
- log4net 使用教程
1.下载log4net (Google log4net) //已有 2.unzip log4net 3.运行VS,新建 c# Windows应用程序. 4.添加引用Log4NET 5.新建一个应用程序 ...
- MVC4下拉少数名族
List<SelectListItem> nationlist = new List<SelectListItem>() { new SelectListItem(){Valu ...
- 仅支持webkit浏览器的多行内容超出显示省略号
.box { display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; ...
- 创建DirectInput接口对象说明---(void **)&m_pDI
读别人代码时遇到的,起初没明白过来这是怎么回事,后来忽然想明白了. if (FAILED(DirectInput8Create(appInstance, DIRECTINPUT_VERSION, II ...
- MessageDigest
转: 我们知道,编程中数据的传输,保存,为了考虑安全性的问题,需要将数据进行加密.我们拿数据库做例子.如果一个用户注册系统的数据库,没有对用户的信息进 行保存,如,我去页面注册,输入"Vic ...
- android 项目学习随笔十六( 广告轮播条播放)
广告轮播条播放 if (mHandler == null) {//在此初始化mHandler , 保证消息不重复发送 mHandler = new Handler() { public void ha ...
- printf,sprintf,vsprintf 区别【转】
转自:http://blog.csdn.net/anye3000/article/details/6593551 有C语言写作历史的程序员往往特别喜欢printf 函数.即使可以使用更简单的命令(例如 ...