转自 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. Cocos开发中可能会遇到的问题

      开发中碰到的问题及解决方案: 1:场景工程中没有被依赖关联的图片声音或者其它资源,导出到微信后找不到 有些在场景工程中没有指定而通过代码中动态加载的资源,cocos creator不会导出到发布目 ...

  2. ReactNative踩坑日志——fetch如何向服务器传递参数

    一:简单参数 简单的参数,我们可以使用手动拼接的方式传递. 格式为: fetch(url?key1=val1&key2=val2&...).then((response) => ...

  3. V-rep学习笔记:机器人路径规划1

     Motion Planning Library V-REP 从3.3.0开始,使用运动规划库OMPL作为插件,通过调用API的方式代替以前的方法进行运动规划(The old path/motion ...

  4. codevs 2185 最长公共上升子序列

    题目链接: codevs 2185 最长公共上升子序列codevs 1408 最长公共子序列 题目描述 Description熊大妈的奶牛在小沐沐的熏陶下开始研究信息题目.小沐沐先让奶牛研究了最长上升 ...

  5. 理解 LDA 主题模型

    前言 gamma函数 0 整体把握LDA 1 gamma函数 beta分布 1 beta分布 2 Beta-Binomial 共轭 3 共轭先验分布 4 从beta分布推广到Dirichlet 分布 ...

  6. Java中的String pool

    public String intern()返回字符串对象的规范化表示形式. 一个初始时为空的字符串池,它由类 String 私有地维护.当调用 intern 方法时,如果池已经包含一个等于此 Str ...

  7. 转:Ogre源代码浅析——脚本及其解析(一)

    Ogre的许多外部资源数据都有着相应的脚本格式,现例举如下: Material(材质):Ogre使用的是“大材质”的概念.狭义的“材质”概念往往是与“贴图”等概念区分开的,比如在Lambert光照模型 ...

  8. XC文件管理器-打造优美易用的文件管理器

    技术:Android+java   概述 XC文件管理器,是基于Android6.0+开发的一个方便易用的文件管理器,具有文件的目录管理和文件的管理,主要包括文件的新建.删除.重命名.复制,移动剪切以 ...

  9. [JavaScript模块演化简史]摘要

    来源于:https://zhuanlan.zhihu.com/p/26231889 # JavaScript 模块化 早期的JavaScript并没有模块化解决方案.随着单页应用与富客户端的流行,出现 ...

  10. [Failed to convert property value of type 'java.lang.String' to required type 'java.util.Date' for property 'beginTime';

    依照https://stackoverflow.com/questions/23702041/failed-to-convert-property-value-of-type-java-lang-st ...