WPF編程學習——視窗

來源:互聯網
上載者:User

本文目錄

  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:當關閉視窗並且從視覺化樹狀結構移除後觸發。

 

  

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.