wpf中子窗口的几个问题
今天研究了一下wpf中的窗口,写这篇文章来总结一下今天的收获。(转载请注明出处~)
总所周知,窗口是windows系统中十分重要的一个元素(从名字上就能体现出来),而一个应用程序总是包含很多窗口(主窗口、子窗口、对话框)。
我们要利用wpf实现一个多窗口的应用。
新建一个wpf项目后,修改xaml如下:
<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">
<Grid>
<DockPanel>
<Menu DockPanel.Dock="Top">
<MenuItem Header="文件(F)"></MenuItem>
<MenuItem x:Name="AboutItem" Header="关于(A)"></MenuItem>
</Menu>
<TextBox DockPanel.Dock="Bottom"></TextBox>
</DockPanel>
</Grid>
</Window>
运行界面如图:
新建一个窗口,将title属性设置为“关于”
我们要实现的功能:单击主窗口(MainWindow)菜单栏上的“关于(A)”弹出AboutWindow
需要注意的地方是,弹出的窗口要以对话框的形式,且打开的位置要在主窗口中央。
实现:
首先,为“关于(A)”项添加click事件(该项已在xaml里命名为:AboutItem)。视线转移到代码文件里,将处理该事件的代码改为:
private void AboutItem_Click(object sender, RoutedEventArgs e)
{
AboutWindow aw = new AboutWindow();
aw.Show();
}
执行结果:
我们只在事件中添加了两行代码就实现了打开窗口功能,
其中第一行是:AboutWindow aw = new AboutWindow();
这句是将AboutWindow窗口 实例化。
第二行:aw.Show();
就是打开窗口了。
于是,我们兴奋地在两个窗口之间切来切去,却发现我们当初想要的效果并没有实现。
第一点,以对话框的形式。就是新窗口必需关闭才能回到原来的窗口,而不是切来切去的子窗口形式。
实现这一点很简单,只需将将添加的第二行代码改为:
aw.ShowDialog();
然后执行发现,必须关闭AboutWindow窗口才能回到原来的窗口。试想,windows中弹出的对话框是不是就是这样的设置呢?
还有一点没有解决,打开的位置要在主窗口中央。试想,正常程序中是不是打开的窗口在主窗口中央呢?而不是在屏幕左上角(或左下角)
要实现这一点要在原来的代码中再添加两行:
private void AboutItem_Click(object sender, RoutedEventArgs e)
{
AboutWindow aw = new AboutWindow();
aw.Owner = this;//将主窗口设置为AboutWindow的拥有者
aw.WindowStartupLocation = WindowStartupLocation.CenterOwner;//将AboutWindow的打开的初始位置设置为在Owner的中央
aw.ShowDialog();
}
程序运行:
至此,两点问题全部解决。
如果要实现主窗口居中,我们可以在属性面板里修改WindowStartupLocation属性为:CenterScreen(不是CenterOwner)
要实现初始打开为最大化,修改WindowState属性为:Maximized
最后:wpf为窗口提供了很丰富的属性,大家可以一一去尝试。希望大家能够发现很多有意思的属性:)
wpf中子窗口的几个问题的更多相关文章
- 2000条你应知的WPF小姿势 基础篇<74-77 WPF 多窗口Tips>
在正文开始之前需要介绍一个人:Sean Sexton. 来自明尼苏达双城的软件工程师.最为出色的是他维护了两个博客:2,000ThingsYou Should Know About C# 和 2,00 ...
- WPF自定义窗口基类
WPF自定义窗口基类时,窗口基类只定义.cs文件,xaml文件不定义.继承自定义窗口的类xaml文件的根节点就不再是<Window>,而是自定义窗口类名(若自定义窗口与继承者不在同一个命名 ...
- WPF自学入门(九)WPF自定义窗口基类
今天简单记录一个知识点:WPF自定义窗口基类,常用winform的人知道,winform的窗体继承是很好用的,写一个基础窗体,直接在后台代码改写继承窗体名.但如果是WPF要继承窗体,我个人感觉没有理解 ...
- WPF 同一窗口内的多线程/多进程 UI(使用 SetParent 嵌入另一个窗口)
原文 WPF 同一窗口内的多线程/多进程 UI(使用 SetParent 嵌入另一个窗口) WPF 的 UI 逻辑只在同一个线程中,这是学习 WPF 开发中大家几乎都会学习到的经验.如果希望做不同线程 ...
- wpf 自定义窗口,最大化时覆盖任务栏解决方案
原文:wpf 自定义窗口,最大化时覆盖任务栏解决方案 相信很多人使用wpf时会选择自定义美观的窗口,因此会设置WindowStyle="None" 取消自带的标题栏.但这样使用 W ...
- WPF自定义窗口最大化显示任务栏
原文:WPF自定义窗口最大化显示任务栏 当我们要自定义WPF窗口样式时,通常是采用设计窗口的属性 WindowStyle="None" ,然后为窗口自定义放大,缩小,关闭按钮的样式 ...
- WPF将窗口置于桌面下方(可用于动态桌面)
WPF将窗口置于桌面下方(可用于动态桌面) 先来看一下效果: 界面元素很简单,就一个Button按钮,然后写个定时器,定时更新Button按钮中的内容为当前时间,下面来介绍下原理,和界面组成. 窗口介 ...
- WPF 自定义窗口
在WPF中,经常需要对窗口进行设置,下面讲讲常用的几个设置. 1.无边框窗口 WindowStyle="None" 窗口样式无 AllowsTransparency="T ...
- WPF 关于窗口的一些显示效果
0. 一些常用尺寸大小: 1920x1080; 1600x900; 1280x720; 1024x576; 1. 设置窗口的边框样式 使用 Window.WindowStyle 属性可以设置窗口的边框 ...
随机推荐
- NSDate常用代码范例
NSDate常用代码范例 NSDate类用于保存时间值,同时提供了一些方法来处理一些基于秒级别时差(Time Interval)运算和日期之间的早晚比较等. 1. 创建或初始化可用以下方法 用于创建N ...
- Github上的600多个iOS开源类库
Github上的600多个iOS开源类库,入下图所示,里面有很多资源,学习积累的好资源 地址:http://github.ibireme.com/github/list/ios/
- IOS开发中AVFoundation中AVAudioPlayer的使用
IOS开发中如何调用音频播放组件 1.与音频相关的头文件等都在AVFoundation.h中,所以第一步是添加音频库文件: #import <AVFoundation/AVFoundation. ...
- UVa 10299 - Relatives
题目大意:Euler's Totient的应用. 几乎和UVa 10179 - Irreducable Basic Fractions一样,于是偷了个懒,直接用10179题的代码,结果WA了,感觉一样 ...
- Outlook 2013 电子邮件账户设置备份与恢复
与之前版本不同,Outlook 2013需要备份以下注册表内容:HKEY_CURRENT_USER\Software\Microsoft\Office\15.0\Outlook\Profiles恢复时 ...
- C++ 句柄类
一.容器与继承 在容器中保存有继承关系的对象时,如果定义成保存基类对象,则派生类将被切割,如果定义成保存派生类对象,则保存基类对象又成问题(基类对象将被强制转换成派生类对象,而派生类中定义的成员未被初 ...
- JMeter使用代理录制脚本
用JMeter做接口测试,有时候接口数量比较多,用录制方式可以节省很多时间,录制接口可以配合badboy使用,但是badboy访问的浏览器是基于ie6的,基本上现在的网站不会对ie6做兼容了,使用代理 ...
- HDU-1864-最大报销额
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1864 这题开始题意没搞清楚,就做题了,导致浪费了很多的时间,不应该啊, 注意事项:每张发票上,单项物品 ...
- Java数据库连接--JDBC调用存储过程,事务管理和高级应用
相关链接:Jdbc调用存储过程 一.JDBC常用的API深入详解及存储过程的调用 1.存储过程的介绍 我们常用的操作数据库语言SQL语句在执行的时候要先进行编译,然后执行,而存储过程是在大型数据库系统 ...
- 有关extdelete恢复测试
客户意外rm掉了数据文件,导致数据库无法打开,由于没有完整的备份和归档,需要使用别的方法,而客户又关闭了数据库,导致无法使用文件描述符恢复,就要使用linux上别的方法了,现记录使用extundele ...