转自 http://www.cnblogs.com/libaoheng/archive/2011/11/18/2253751.html

本文目录

  1.窗口的外观

  2.窗口的位置

  3.窗口的大小

  4.窗口的可见性和状态

  5.窗口的生命周期

1.窗口的外观

  WPF中默认窗口框架的外观,主要取决于IconTitleWindowsStyleResizeMode等属性。

  Icon 指定窗口的图标;

  Title 指定窗口的标题;

  WindowStyle 指定窗口样式,有4个取值:

    None,无边框;(当ResizeMode属性为NoResize时,仅剩下窗口核心。)

    SingleBorderWindow,单边框【默认】;

    ThreeDBorderWindow,3D边框;

    ToolBorderWindow,工具箱窗口;

  ResizeMode 是指定大小调节样式,有4个取值:

    NoResize,不可调节,同时没有最大最小按钮;

    CanMinimize,不可调节。但可以最小化;(此时最大化按钮不可用)

    CanResize,可调节【默认】;

    CanResizeWithGrid,可根据网格调节;(窗口右下脚显示可调节网格)

  

2.窗口的位置

  WindowStartLocation 指定窗口初始位置,有3个取值:

    Manual,手工指定位置,表示可以通过设置其TopLeft属性值来决定窗口的初始位置;

    CenterScreen,屏幕中央;

    CenterOwner,父窗体中央;

  TopMost 调节窗口的前后顺序,属性值为true时,窗口位于最前。

    TopMost值为true的窗口,位于TopMost值为false的窗口之前(如下图记事本与示例窗口);

    TopMost值都为true的窗口,获得焦点的窗口位于前(如下图QQ与示例窗口)。

  

3.窗口的大小

  WidthHeight,分别表示窗口的宽度和高度,称为“尺寸属性”。

  MaxWidth、MinWidth、MaxHeight、MinHeight,分别表示窗口最大宽度、最小宽度、最大高度、最小高度。可以通过得到和更改这些属性值,来获取和改变窗口的大小和长宽范围。

  ActualWidthActualHeight,分别表示窗口的实际宽度和实际高度,称为“实际尺寸属性”。

实际尺寸属性是根据当前窗口大小、最小化时窗口大小和最大化时窗口大小来计算得到的,其值是只读的,也就是说,不能通过改变ActualWidth、ActualHeight的值来更改窗口大小。

  SizeToContent,表示窗口大小由内容决定,有4个取值:

    Manual,手工【默认】;

    Width,窗体宽度由内容决定;

    Height,窗体高度由内容决定;

    WidthAndHeight,窗体大小由内容决定;

  如果内容尺寸超过了窗口的最大或最小范围,还是以最大/最小范围为主。如果手工指定了窗口的Width、Height 属性,那么SizeToContent将被忽略。

  ReSize,窗口大小的可调整性(第1部分已提到)。

4.窗口的可见性和状态

  Visibility,窗口可见性,有4个枚举值:

    Visiable,可见;

    Hidden,隐藏;

    Collapsed,折叠。

  虽然窗口类认为Collapsed与Hidden一样,但二者区别在于,Hidden仅仅将元素设为不可见,但是元素在画面上依然占有空间;而Collapsed,在不可视的基础上,能将元素在画面上的占位符清除,元素彻底不影响画面。

  ShowHide,显示窗口和隐藏窗口的两个方法。如果窗口的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编程学习——窗口的更多相关文章

  1. WPF编程,窗口保持上次关闭时的大小与位置。

    原文:WPF编程,窗口保持上次关闭时的大小与位置. 版权声明:我不生产代码,我只是代码的搬运工. https://blog.csdn.net/qq_43307934/article/details/8 ...

  2. WPF编程学习——样式

    本文目录 1.引言 2.怎样使用样式? 3.内联样式 4.已命名样式 5.元素类型样式 6.编程控制样式 7.触发器 1.引言 样式(Style),主要是用来让元素或内容呈现一定外观的属性.WPF中的 ...

  3. WPF编程学习 —— 样式

     本文目录 1.引言 2.怎样使用样式? 3.内联样式 4.已命名样式 5.元素类型样式 6.编程控制样式 7.触发器 1.引言 样式(Style),主要是用来让元素或内容呈现一定外观的属性.WPF中 ...

  4. WPF编程学习——布局

    本文目录 1.布局简介 2.面板(Panel) 3.视图框(Viewbox) 4.滚动视图控件(ScrollViewer) 5.公共布局属性 1.布局简介 应用程序界面设计中,合理的元素布局至关重要, ...

  5. WPF编程学习——动画

    前言 使用动画,是增强用户体验的一种有效的手段.合理的动画,可以让应用程序的界面看起来更加自然.真实.流畅.舒适,更有效地向用户展现信息,用户也更容易接受.同时也增加了软件使用的乐趣,提高用户粘度.( ...

  6. WPF编程学习——样式(好文)

    http://www.cnblogs.com/libaoheng/archive/2011/11/20/2255963.html

  7. WPF编程,使用WindowChrome实现自定义窗口功能的一种方法。

    原文:WPF编程,使用WindowChrome实现自定义窗口功能的一种方法. 版权声明:我不生产代码,我只是代码的搬运工. https://blog.csdn.net/qq_43307934/arti ...

  8. WPF编程,指定窗口图标、窗口标题,使得在运行状态下任务栏显示窗口图标的一种方法。

    原文:WPF编程,指定窗口图标.窗口标题,使得在运行状态下任务栏显示窗口图标的一种方法. 版权声明:我不生产代码,我只是代码的搬运工. https://blog.csdn.net/qq_4330793 ...

  9. WPF的学习笔记(1) -- (积累自2016年5月1日 至 2016年6月1日)

    敬告读者:因为是事件驱动模式的高速学习,高速学习意味着,不系统,不科学,不合逻辑,不一定正确.所以要是有不对的地方,页面下面留言给我,跪谢! 背景介绍: 最近在公司的开发工作中,接手了从别的公司交代过 ...

随机推荐

  1. sell 项目 订单详情表 设计 及 创建

    1.数据库设计 2.订单详情表 创建 /** * 订单详情表 */ create table `order_detail` ( `detail_id` varchar(32) not null, `o ...

  2. 【PMP】三点估算法

    通过考虑估算中的不确定性和风险,可以提高持续时间估算的准确性. 最可能时间(tM):基于最可能获得的资源.最可能取得的资源生产率.对资源可用时间的现实预计,资源对其他参与者的可能依赖关系及可能发生的各 ...

  3. 【shell】创建长目录,目录存在则忽略,缺失则创建

    有时候,我们需要创建一个空目录树,如果给定路径包含目录,那么还必须检查这些目录是否存在: mkdir –p /qinys/oliver/tmp/ 执行上述命令即可创建长目录,并且有则忽略,无则创建原则 ...

  4. log4j2的xml的配置样例

    log4j2.xml <?xml version="1.0" encoding="UTF-8"?> <Configuration status ...

  5. django之 文件上传功能(缺陷:无法改存放目录)

    百度云盘:django之 文件上传功能(缺陷:无法改存放目录)

  6. MySQL表名大小写敏感导致的问题

      最近在项目中遇到一个比较奇怪的小问题.在开发过程中自己测试没有问题,但是提测后,测试的同时在测试一个功能时报错了,日志是: Caused by: com.mysql.jdbc.exceptions ...

  7. http协议请求方法

    解析HTTP协议六种请求方法get.put.post.delete.options和trace含义与区别. 1.GET   selecr请求会向数据库发索取数据的请求,从而来获取信息,该请求就像数据库 ...

  8. 【mysql】关于InnoDB存储引擎 text blob 大字段的存储和优化

    最近在数据库优化的时候,看到一些表在设计上使用了text或者blob的字段,单表的存储空间已经达到了近100G,这种情况再去改变和优化就非常难了 一.简介 为了清楚大字段对性能的影响,我们必须要知道i ...

  9. (原)tensorflow中提示CUDA_ERROR_LAUNCH_FAILED

    转载请注明出处: http://www.cnblogs.com/darkknightzh/p/6606092.html 参考网址: https://github.com/tensorflow/tens ...

  10. (原)ubuntu中安装kate

    转载请注明出处: http://www.cnblogs.com/darkknightzh/p/6339642.html 参考网址: https://kate-editor.org/build-it/# ...