WPF基礎知識

WPF簡介

一、特色

  • Windows Presentation Foundation (WPF) 是微軟的下一代桌面顯示系統
  • 與分辨率無關而且基於向量的呈現引擎
  • 可以利用現代圖形硬件的優點
  • WPF全部的操做都不依賴於GDI和GDI+,而是間接依賴於強大的Direct3D

二、歷史背景

1983~1991年:C搭配Windows API。當時的程序員是不多的,而且開發一個項目也比較的不容易。
1992~2001年:C++搭配MFC庫。在歷史上MFC是最多人用的Windows編程方法。但此後MFC技術也逐漸退出了歷的舞臺。
2002~2006年:(C#、VB以及其餘語言)+Windows Form框架。這段期間IT技術的焦點是在Web上,因此雖然你們都在用.NET,但真正的主角是ASP.NET,而不是Windows Forms。Windows Forms還沒等熬出頭,WPF就出現了。
2007~如今 :2007年1月30日,Windows Vista正式全球同步發佈。它之因此能實現那麼絢麗的效果,最關鍵的一點就是Windows Presentation Foundation(WPF),由後臺語言(C#、VB以及其餘語言)+XAML構成。由於WPF支持硬件加速、精確顏色、浮點座標、動畫實現、三維、視頻,這些效果是傳統的 Winform 達不到的。程序員

Application

一、應用程序生命週期

WPF和 傳統的WinForm 相似, WPF 一樣須要一個 Application 來統領一些全局的行爲和操做,而且每一個Domain(應用程序域)中只能有一個 Application 實例存在。編程

二、應用程序關閉(Application.ShutdownMode)

三、Application對象的事件

Window

一、窗體生命週期

顯示窗體

構造函數
Show()、ShowDialog()方法
Loaded事件安全

關閉窗體

Close()方法
Closing事件、Closed事件app

窗體的激活

Activate()方法
Activated、Deactivated事件框架

二、窗體經常使用屬性

  • 窗體邊框模式(WindowStyle屬性)和是否容許更改窗體大小(ResizeMode屬性)。函數

  • 窗體啓動位置(WindowStartupLocation屬性)和啓動狀態(WindowState屬性) 等。佈局

  • 窗體標題(Title屬性)及圖標 。測試

  • 是否顯示在任務欄(ShowInTaskbar)動畫

  • 始終在最前(TopMost屬性)this

類繼承結構

Object:全部類的基類

DispatcherObject:保證線程安全的基類

DependencyObject :參與依賴屬性系統的基類

Visual:爲WPF提供呈現支持,包括命中測試,座標轉換和邊界框計算

UIElement:核心級可視化元素基類,提供了佈局,輸入,焦點,路由,動畫功能

FrameworkElement:框架級可視化元素基類,擴展了佈局系統,邏輯樹,生存期事件,數據綁定,樣式,更多動畫等功能

Control:控件基類,可使用ControlTemplate來定義外觀,重寫了Focusable,默認爲true

Panel:面板基類,用於放置及排列子元素,默認不接受焦點,Focusable爲false

ContentControl :包含任何類型的單項內容的控件,具備Content屬性,默認樣式有限,若是要加強控件外觀,能夠設置其ContentTemplate

WPF邏輯樹及可視樹

在許多技術中,元素和組件都按樹結構的形式組織。在這種結構中,開發人員能夠直接操做樹中的對象節點來影響應用程序的呈現或行爲。WPF也使用了若干樹結構形式來定義程序元素之間的關係。 WPF 公開兩個提供樹形式視圖的幫助器類:LogicalTreeHelper 和 VisualTreeHelper。 WPF 文檔中還使用了「可視化樹」和「邏輯樹」兩個術語,它們有助於理解某些關鍵 WPF 功能的行爲。

Xaml基礎

XAML語法概述

XAML 是一種聲明性標記語言。XAML 文件是一般具備 .xaml 擴展名的 XML 文件

<StackPanel> 
      <Button Content="Click Me"/> 
</StackPanel>

XAML 對象元素

<Button/>
<Button></Button>

XAML 屬性元素語法

<Button Background="Red" Foreground="Blue" Content="Click Me!"/>
<Button>
    <Button.Background>Red</Button.Background>
    <Button.Foreground>Blue</Button.Foreground>
    <Button.Content>Click Me!</Button.Content>
</Button>

XAML 集合元素

<LinearGradientBrush>
    <LinearGradientBrush.GradientStops>
        <GradientStop Offset="0.0" Color="Red" />
        <GradientStop Offset="1.0" Color="Blue" />
    </LinearGradientBrush.GradientStops>
</LinearGradientBrush>

<ListBox>
    <ListBoxItem Content="ListBoxItem1"/>
    <ListBoxItem Content="ListBoxItem2"/>
    <ListBoxItem Content="ListBoxItem3"/>
</ListBox>

XAML 內容屬性

<Border>
    <TextBox Width="300"/>
</Border>
<Border>
    <Border.Child>
        <TextBox Width="300"/>
    </Border.Child>
</Border>

<Button>Hello</Button>

XAML 特定語法(事件)

<Button Click="Button_OnClick"/>

XAML 標記擴展

<Window.Resources>
    <SolidColorBrush x:Key="MyBrush" Color="Gold"/>
    <Style TargetType="Border" x:Key="PageBackground">
        <Setter Property="Background" Value="Blue"/>
    </Style>
</Window.Resources>
<Border Style="{StaticResource PageBackground}"/>

XAML 類型轉換器

<Button Margin="10,20,10,30"/>
<Button>
    <Button.Margin>
        <Thickness Left="10" Top="20" Right="10" Bottom="30"/>
    </Button.Margin>
</Button>

XAML 根元素和命名空間

<Window x:Class="WpfApplication3.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  • x:Key:爲 ResourceDictionary(或其餘框架中的相似字典概念)中的每一個資源設置惟一的鍵。 在典型的 WPF 應用程序標記中的全部 x: 用法中,x:Key 將可能佔到 90%。

  • x:Class:向爲 XAML 頁提供代碼隱藏的類指定 CLR 命名空間和類名。 必須具備這樣一個類才能支持每一個 WPF 編程模型的代碼隱藏,而正是所以,即便沒有資源,也幾乎老是能看到映射的 x:。

  • x:Name:處理對象元素後,爲運行時代碼中存在的實例指定運行時對象名稱。 一般,您將爲 x:Name 常常使用 WPF 定義的等效屬性。 此類屬性特定映射到 CLR 後備屬性,所以更便於進行應用程序編程,在應用程序編程中,您常常使用運行時代碼從初始化的 XAML 中查找命名元素。 最多見的此類屬性是 FrameworkElement.Name。 在特定類型中不支持等效的 WPF 框架級 Name 屬性時,仍然可使用 x:Name。 某些動畫方案中會發生這種狀況。

  • x:Static:啓用一個返回靜態值的引用,該靜態值只能是一個 XAML 兼容屬性。

  • x:Type:根據類型名稱構造一個 Type 引用。 它用於指定採用 Type(例如 Style.TargetType)的特性,但屬性常常具備本機的字符串到 Type的轉換功能,所以使用 x:Type 標記擴展用法是可選的。

XAML 附加屬性和附加事件

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition/>
        <ColumnDefinition/>
    </Grid.ColumnDefinitions>
    <Button Grid.Column="0"/>
    <Button Grid.Column="1"/>
</Grid>

從代碼中加載XAML

var window = XamlReader.Load(File.OpenRead("MainWindow.xaml")) as Window;

using (var stream = File.Create("MyWindow.xaml"))
{
    XamlWriter.Save(this, stream);
}

來源:深圳築星科技

相關文章
相關標籤/搜索