【.net 深呼吸】WPF 中的父子窗口
2021-05-14 14:29
标签:另一个 按钮 img ted 很多 info send line out 与 WinForm 不同,WPF 并没有 MDI 窗口,但 WPF 的窗口之间是可以存在“父子”关系的。 我们会发现,Window 类公开了一个属性叫 Owner,这个属性是可读可写的,从名字上我们也能猜到,应该是用来设置窗口的父子关系的。这个属性看起来不难用,只要赋个窗口实例即可,而真正的难点是你得搞清楚“谁是谁的父窗口”,“谁是谁的子窗口”,一旦你搞混了,有可能会应用程序带来一些小麻烦。 这个问题是一位妹子问我的,不然怎么说女孩子特别细心呢,这个小玩意儿估计很多时候我们都不会注意到。 下面,老周给大伙儿弄个示例,我们还是“有理有据”,用实际例子来看看父窗口与子窗口之间的关系变化会有啥不同。 第一步,我们准备好主窗口,通常创建 WPF 项目时,项目模板会生成一个主窗口——MainWindow,我们就用它吧。 注意那个按钮,后面有用,点击它可以打开另一个窗口。 第二步,再新建一个 WPF 窗口,XAML 如下。 那个“关闭”按钮没啥特殊功能,只是用来关闭窗口,代码如下。 第三步,回到主窗口,刚刚老周提醒过,主窗口上那个 Button 控件,现在要用上了,我们处理一下它的单击事件。 对一个窗口来说,必须显示以后,才能操作 Owner 属性,为了安全保险,大家可以在窗口显示后再去思考谁是谁的 Owner。 现在我们来运行一下。打开新窗口时是这样的。 然后,切换到其他窗口,再切换回来,你会看到,此时就算新窗口处于激活状态,主窗口始终挡在新窗口前。 而且,你还会发现,把主窗口关了程序不会退出,但把新窗口关了程序就会退出。那是因为现在 w2 才是父窗口,而 MainWindow 成了子窗口。 现在我们把代码改一下。 看好了,这一次是 MainWindow 作为父窗口,w2 作为子窗口。这样的逻辑才符合我们的要求,当初的预期就是,MainWindow 窗口上打开新窗口,并且当进行了窗口切换后再次回到应用程序时,应当让新打开的窗口处于活动状态。 再次运行,此时,你会看到,新窗口始终会挡在主窗口前面。 好了,今天的内容就差不多了,还是那句话,你要弄清楚谁是谁的父窗口。给大家一句万能口诀:Owner 属性所引用的窗口就会成为父窗口。 【.net 深呼吸】WPF 中的父子窗口 标签:另一个 按钮 img ted 很多 info send line out 原文地址:http://www.cnblogs.com/tcjiaan/p/7519730.htmlWindow x:Class="MyDemo.MainWindow"
……
mc:Ignorable="d"
Title="父窗口" Height="350" Width="525">
StackPanel Margin="20">
TextBlock Margin="0,12,0,100" Text="主窗口" FontSize="40" FontFamily="楷体" HorizontalAlignment="Center"/>
Button Content="点击报名火星单程游" HorizontalAlignment="Center" Padding="150,15" Click="OnClick"/>
StackPanel>
Window>
Window x:Class="MyDemo.AddNewWindow"
……
mc:Ignorable="d"
Title="报名" Height="300" Width="300">
Grid>
Button Content="关闭" VerticalAlignment="Bottom" HorizontalAlignment="Center" Padding="100,10" Click="OnClick"/>
Grid>
Window>
private void OnClick(object sender, RoutedEventArgs e)
{
Close();
}
private void OnClick(object sender, RoutedEventArgs e)
{
AddNewWindow w2 = new AddNewWindow();
w2.Show();
this.Owner = w2;
}
AddNewWindow w2 = new AddNewWindow();
w2.Show();
//this.Owner = w2;
w2.Owner = this;
上一篇:C#中怎样实现序列化和反序列化
下一篇:ncbi API