XAML三个顶级元素

Window、UserControl(用户控件,布局的时候像窗体那样布局就可以 了)、Page把窗体以网页形式展现。

而一个XAML页面里只能有一个顶级元素。而顶级元素里面只能有一个子元 素。因此要有布局控件。

Window窗体属性

  1. 窗口的外观 WPF中默认窗口框架的外观,主要取决于Icon、Title、WindowStyle、ResizeMode等属 性。

Icon 指定窗口的图标;  

Title 指定窗口的标题;   

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

None,无边框;(当ResizeMode属性为NoResize时,仅剩下窗口核心。) SingleBorderWindow,单边框【默认】;    

ThreeDBorderWindow,3D边框;     

ToolWindow,工具箱窗口

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

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

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

CanResize,可调节【默认】;    

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

  1. 窗口的位置

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

Manual,手动指定位置,表示可以通过设置其Top、Left属性值来决定窗口的初始位 置;      CenterScreen,屏幕中央; 

CenterOwner,父窗体中央;

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

Topmost值为true的窗口,位于Topmost值为false的窗口之前;     

Topmost值都为true的窗口,获得焦点的窗口位于前。

  1. 窗口的大小

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

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

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

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

Manual,手工【默认】;     

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

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

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

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

  1. 窗口的可见性和状态

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

Visible,可见;    

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属性值保存到配置文件,下一次启动程序窗口时,读取上次 保存的窗口大小、位置,来初始化窗口,以此实现保存用户配置等功能。

MSD上的例子:http://msdn.microsoft.com/zhcn/library/system.windows.window.restorebounds.aspx 。

获取窗口在最小化或最大化之前的大小和位置。

//属性值:Rect。一个 Rect,指定窗口在最小化或最大化之前的大小和位置。

public System.Windows.Rect RestoreBounds { get; }

XAML

下面的示例使用 RestoreBounds 和独立存储来确保窗口的大小和位置与上一次显示窗口 时的大小和位置相同。

<Window x:Class="WpfApplication1.Window1"

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

 Title="WindowRestoreBoundsSnippets"

 Closing="MainWindow_Closing">

</Window>

C#

using System;

using System.ComponentModel;

using System.IO;

using System.IO.IsolatedStorage;

using System.Windows;

namespace WpfApplication1

{

 /// <summary>

 /// Window1.xaml 的交互逻辑

 /// </summary>

 public partial class Window1 : Window

 {

 string filename = "settings.txt";

 public Window1()

 {

 InitializeComponent();

 // 刷新从先前打开的窗口恢复边界

 IsolatedStorageFile storage =

IsolatedStorageFile.GetUserStoreForAssembly();

try

 {

 using (IsolatedStorageFileStream stream = new

IsolatedStorageFileStream(this.filename, FileMode.Open, storage))

 using (StreamReader reader = new StreamReader(stream))

 {

 // 从文件中读取恢复边界值

 Rect restoreBounds = Rect.Parse(reader.ReadLine());

 this.Left = restoreBounds.Left;

 this.Top = restoreBounds.Top;

 this.Width = restoreBounds.Width;

 this.Height = restoreBounds.Height;

 }

 }

 catch (FileNotFoundException ex)

 {

 // 当文件在独立存储中找不到时,句柄:

 // * 这是第一次应用程序会话

 // * 文件已被删除

 }

 }

 private void MainWindow_Closing(object sender,

System.ComponentModel.CancelEventArgs e)

 {

 // 保存restore bounds,以便下次打开此窗口时使用

 IsolatedStorageFile storage =

IsolatedStorageFile.GetUserStoreForAssembly();

 using (IsolatedStorageFileStream stream = new

IsolatedStorageFileStream(this.filename, FileMode.Create, storage))

 using (StreamWriter writer = new StreamWriter(stream))

 {

 // 写恢复边界值到文件

 writer.WriteLine(this.RestoreBounds.ToString());

 }

 }

 }

}

注解:

还原矩形是窗口在最小化或最大化之前占用的区域。 在应用程序关闭之前,可以使

用 RestoreBounds 来保存窗口的最后一个大小和位置,并在下次应用程序启动时检索这

些值,以将窗口还原到用户离开它的方式。

如果在显示窗口之前或在窗口关闭之后 RestoreBounds 查询,则返回 Empty。

5. 窗口的生命周期

关于各事件的描述:

Initialized:当窗口的FrameworkElement底层初始化时触发,即InitializeComponent方

法调用时触发。  

LocationChanged:窗口被移动时触发。

Activated:窗口被激活时触发。  

Deactivated:窗口处于非激活时(即其他窗口处于激活时)触发。   

Loaded:显示窗口之前触发。  

ContentRendered:当内容显示的时候触发。   

Closing:尝试关闭窗口时触发,可以将参数CancelEventArgs的Cancel的属性设置为

true,取消关闭操作。   

Closed:在窗口关闭后触发该事件,无法取消。

Unloaded:当关闭窗口并且从可视化树移除后触发。

以上就是我的分享,新手上道,请多多指教。

如果有更好的方法或不懂得地方欢迎在评论区教导和提问喔!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值