WPF编程学习——窗口

时间:2022-04-16 10:24:54

转自 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,工具箱窗口;

WPF编程学习——窗口WPF编程学习——窗口

WPF编程学习——窗口WPF编程学习——窗口

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

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

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

    CanResize,可调节【默认】;

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

WPF编程学习——窗口WPF编程学习——窗口

  

WPF编程学习——窗口WPF编程学习——窗口

2.窗口的位置

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

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

    CenterScreen,屏幕*;

    CenterOwner,父窗体*;

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

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

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

WPF编程学习——窗口  WPF编程学习——窗口

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

WPF编程学习——窗口

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

应用程序窗口在上次关闭处启动

  向资源中添加两个变量MainRestoreBounds和MainWindowState,对应类型如图所示,用于保存主窗口的RestoreBounds属性值。

  WPF编程学习——窗口

  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#

WPF编程学习——窗口
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(); } }
}
WPF编程学习——窗口

 

5.窗口的生命周期

  

WPF编程学习——窗口

  关于各事件的描述:

  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