WPF编程学习——窗口
转自 http://www.cnblogs.com/libaoheng/archive/2011/11/18/2253751.html
本文目录
1.窗口的外观
2.窗口的位置
3.窗口的大小
4.窗口的可见性和状态
5.窗口的生命周期
1.窗口的外观
WPF中默认窗口框架的外观,主要取决于Icon、Title、WindowsStyle、ResizeMode等属性。
Icon 指定窗口的图标;
Title 指定窗口的标题;
WindowStyle 指定窗口样式,有4个取值:
None,无边框;(当ResizeMode属性为NoResize时,仅剩下窗口核心。)
SingleBorderWindow,单边框【默认】;
ThreeDBorderWindow,3D边框;
ToolBorderWindow,工具箱窗口;




ResizeMode 是指定大小调节样式,有4个取值:
NoResize,不可调节,同时没有最大最小按钮;
CanMinimize,不可调节。但可以最小化;(此时最大化按钮不可用)
CanResize,可调节【默认】;
CanResizeWithGrid,可根据网格调节;(窗口右下脚显示可调节网格)




2.窗口的位置
WindowStartLocation 指定窗口初始位置,有3个取值:
Manual,手工指定位置,表示可以通过设置其Top、Left属性值来决定窗口的初始位置;
CenterScreen,屏幕中央;
CenterOwner,父窗体中央;
TopMost 调节窗口的前后顺序,属性值为true时,窗口位于最前。
TopMost值为true的窗口,位于TopMost值为false的窗口之前(如下图记事本与示例窗口);
TopMost值都为true的窗口,获得焦点的窗口位于前(如下图QQ与示例窗口)。

3.窗口的大小
Width、Height,分别表示窗口的宽度和高度,称为“尺寸属性”。
MaxWidth、MinWidth、MaxHeight、MinHeight,分别表示窗口最大宽度、最小宽度、最大高度、最小高度。可以通过得到和更改这些属性值,来获取和改变窗口的大小和长宽范围。
ActualWidth、ActualHeight,分别表示窗口的实际宽度和实际高度,称为“实际尺寸属性”。
实际尺寸属性是根据当前窗口大小、最小化时窗口大小和最大化时窗口大小来计算得到的,其值是只读的,也就是说,不能通过改变ActualWidth、ActualHeight的值来更改窗口大小。
SizeToContent,表示窗口大小由内容决定,有4个取值:
Manual,手工【默认】;
Width,窗体宽度由内容决定;
Height,窗体高度由内容决定;
WidthAndHeight,窗体大小由内容决定;
如果内容尺寸超过了窗口的最大或最小范围,还是以最大/最小范围为主。如果手工指定了窗口的Width、Height 属性,那么SizeToContent将被忽略。
ReSize,窗口大小的可调整性(第1部分已提到)。
4.窗口的可见性和状态
Visibility,窗口可见性,有4个枚举值:
Visiable,可见;
Hidden,隐藏;
Collapsed,折叠。
虽然窗口类认为Collapsed与Hidden一样,但二者区别在于,Hidden仅仅将元素设为不可见,但是元素在画面上依然占有空间;而Collapsed,在不可视的基础上,能将元素在画面上的占位符清除,元素彻底不影响画面。
Show、Hide,显示窗口和隐藏窗口的两个方法。如果窗口的ShowInTaskbar属性值为true,Hide不但隐藏窗口本身,同时隐藏其在任务栏上的图标。
WindowState,窗口状态属性,有3个枚举值:
Normal,正常;
Maximized,最大化;
Minimized,最小化;
RestoreBounds,获取窗口在最小化或最大化之前的大小和位置,有4个枚举值,Top、Left、Width、Height。
//输出当前窗口的RestoreBounds值
private void button1_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show(this.RestoreBounds.ToString());
}
该主窗口的Top:75,Left:75,Width:525,Height:350

只有窗口在Normal状态下移动或调整时,RestoreBounds的值才会改变。于是可以在窗口关闭时将RestoreBounds属性值保存到配置文件,下一次启动程序窗口时,读取上次保存的窗口大小、位置,来初始化窗口,以此实现保存用户配置等功能。MSDN上的例子:http://msdn.microsoft.com/zh-cn/library/system.windows.window.restorebounds.aspx 。但推荐使用config文件来保存配置,更方便。
应用程序窗口在上次关闭处启动
向资源中添加两个变量MainRestoreBounds和MainWindowState,对应类型如图所示,用于保存主窗口的RestoreBounds属性值。

XAML
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Width="360" Height="240"
Closing="Window_Closing">
</Window>
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes; namespace WpfApplication1
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent(); //读取配置文件
try
{
//设置位置、大小
Rect restoreBounds = Properties.Settings.Default.MainRestoreBounds;
this.WindowState = WindowState.Normal;
this.Left = restoreBounds.Left;
this.Top = restoreBounds.Top;
this.Width = restoreBounds.Width;
this.Height = restoreBounds.Height;
//设置窗口状态
this.WindowState = Properties.Settings.Default.MainWindowState;
}
catch { }
} private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
//保存当前位置、大小和状态,到配置文件
Properties.Settings.Default.MainRestoreBounds = this.RestoreBounds;
Properties.Settings.Default.MainWindowState = this.WindowState;
Properties.Settings.Default.Save(); } }
}

5.窗口的生命周期

关于各事件的描述:
Initialized:当窗口的FrameworkElement底层初始化时触发,即InitializeComponent方法调用时触发。
LocationChanged:窗口被移动时触发。
Activated:窗口被激活时触发。
Deactivated:窗口处于非激活时(即其他窗口处于激活时)触发。
Loaded:显示窗口之前触发。
ContentRendered:当内容显示的时候触发。
Closing:尝试关闭窗口时触发,可以将参数CancelEventArgs的Cancel的属性设置为true,取消关闭操作。
Closed:在窗口关闭后触发该事件,无法取消。
Unloaded:当关闭窗口并且从可视化树移除后触发。
转自 http://www.cnblogs.com/libaoheng/archive/2011/11/18/2253751.html
WPF编程学习——窗口的更多相关文章
- WPF编程,窗口保持上次关闭时的大小与位置。
原文:WPF编程,窗口保持上次关闭时的大小与位置. 版权声明:我不生产代码,我只是代码的搬运工. https://blog.csdn.net/qq_43307934/article/details/8 ...
- WPF编程学习——样式
本文目录 1.引言 2.怎样使用样式? 3.内联样式 4.已命名样式 5.元素类型样式 6.编程控制样式 7.触发器 1.引言 样式(Style),主要是用来让元素或内容呈现一定外观的属性.WPF中的 ...
- WPF编程学习 —— 样式
本文目录 1.引言 2.怎样使用样式? 3.内联样式 4.已命名样式 5.元素类型样式 6.编程控制样式 7.触发器 1.引言 样式(Style),主要是用来让元素或内容呈现一定外观的属性.WPF中 ...
- WPF编程学习——布局
本文目录 1.布局简介 2.面板(Panel) 3.视图框(Viewbox) 4.滚动视图控件(ScrollViewer) 5.公共布局属性 1.布局简介 应用程序界面设计中,合理的元素布局至关重要, ...
- WPF编程学习——动画
前言 使用动画,是增强用户体验的一种有效的手段.合理的动画,可以让应用程序的界面看起来更加自然.真实.流畅.舒适,更有效地向用户展现信息,用户也更容易接受.同时也增加了软件使用的乐趣,提高用户粘度.( ...
- WPF编程学习——样式(好文)
http://www.cnblogs.com/libaoheng/archive/2011/11/20/2255963.html
- WPF编程,使用WindowChrome实现自定义窗口功能的一种方法。
原文:WPF编程,使用WindowChrome实现自定义窗口功能的一种方法. 版权声明:我不生产代码,我只是代码的搬运工. https://blog.csdn.net/qq_43307934/arti ...
- WPF编程,指定窗口图标、窗口标题,使得在运行状态下任务栏显示窗口图标的一种方法。
原文:WPF编程,指定窗口图标.窗口标题,使得在运行状态下任务栏显示窗口图标的一种方法. 版权声明:我不生产代码,我只是代码的搬运工. https://blog.csdn.net/qq_4330793 ...
- WPF的学习笔记(1) -- (积累自2016年5月1日 至 2016年6月1日)
敬告读者:因为是事件驱动模式的高速学习,高速学习意味着,不系统,不科学,不合逻辑,不一定正确.所以要是有不对的地方,页面下面留言给我,跪谢! 背景介绍: 最近在公司的开发工作中,接手了从别的公司交代过 ...
随机推荐
- 【Zookeeper】源码分析之序列化
一.前言 在完成了前面的理论学习后,现在可以从源码角度来解析Zookeeper的细节,首先笔者想从序列化入手,因为在网络通信.数据存储中都用到了序列化,下面开始分析. 二.序列化 序列化主要在zook ...
- 解决mybatis报错Result Maps collection does not contain value for java.lang.Integer
解决办法:1.检查mybatis的xml配置 2.在某处肯定有配错了的,如"resultMap" -->"resultType" [html] view ...
- 原生Ajax使用教程
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6682564.html 浏览器端 一:创建XMLHttpRequest对象 所有现代浏览器均支 ...
- 取代Ant——Maven简介
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6625724.html 一:目前开发存在的问题 在没有Maven之前,我们开发一个项目,需要自行导入各种不同的 ...
- Windows虚拟内存不足问题的处理
一般而言,当系统缺少虚拟内存会引起很多问题,包含但不限于: 操作系统运行缓慢,甚至出现Hang(夯机),蓝色背景界面的情况 用户本地控制台输入用户名.密码后,无法登录到操作系统,卡在欢迎界面 无法远程 ...
- cocos2d-js 各浏览器上的表现
其实这里只简单对比3个浏览器,估计也足够代表性了. 结论是: 1.有webgl支持的时候,就可以尽情的耍吧: 2.没有webgl,能native就native.如果不行,就只能在canvas上做小块的 ...
- [Dubbo实战]dubbo + zookeeper + spring 实战 (转)
这里最熟悉的就是spring了,项目中应用很多.dubbo是一个实现分布式的框架,zookeeper是注册中心.给我的感觉就像多对多关系的两者表,zookeeper相当于第三张表维护关系.下面通过一个 ...
- 修改mysql数据引擎的方法- 提高数据库性能
前言:同学告我说,他为了能使得数据查询变得快一点,修改的数据引擎,故查询一下,总结一下. 登录mysql后,查看当前数据库支持的引擎和默认的数据库引擎,使用下面命令: mysql>show en ...
- 【原创+亲测可用】JS如何区分微信浏览器、QQ浏览器和QQ内置浏览器
1.原理: 通过不同移动端的ua弹窗 获取user-agent 参数包含的信息,进行判断浏览器类型 在Android上 QQ内置环境的ua中有关键字 MQQBrowser, 并且后面包含一个[空白符+ ...
- PIL笔记
图片颜色的类型 1 (1-bit pixels, black and white, stored with one pixel per byte) L (8-bit pixels, black and ...