日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

WPF XAML 从零开始认识XAML

發布時間:2023/12/20 asp.net 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 WPF XAML 从零开始认识XAML 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

來自:http://blog.csdn.net/aoshilang2249/article/details/44158403


?剖析最簡單的XMAL代碼:

[html]?view plain?copy
  • <Window?x:Class="MyFirstApplication.MainWindow"??
  • ????????xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"??
  • ????????xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"??
  • ????????Title="MainWindow"?Height="350"?Width="525">??
  • ????<Grid>??
  • ??????????
  • ????</Grid>??
  • </Window>??

  • ? ? ? ? 花花綠綠一大片,還有兩個像主頁地址的東西....它們都是些什么呢,讓我們一個個來分析。

    ???XAML是由XML派生出來的語言,所以有很多在XML中的概念在XAML中是通用的。比如使用標簽聲明一個元素(每一個元素對應內存中的一個對象)時,需要使用起始標簽<tab>和結束標簽</tag>,夾在起始標簽和終止標簽中的XAML代碼表示隸屬于這個標簽的內容。如果沒有什么內容隸屬于這個標簽,則這個標簽稱為空標簽,可以寫為<tag/>


    ? ? 為了表示同類標簽中的某個標簽的與眾不同,可以給它的特征(Attribute)賦值。為特征賦值的語法如下:
    ? ? 非空標簽:<tag Attribute1=value1 Attribute2=value2>content</tag>
    ? ? 空標簽<tag Attribute1=value1 Attribute2=value2/>

    ? ? 在這里有必要把Attribute和Property仔細地辨別一下。

    ? ? 這個詞的混淆由來已久,混淆的主要原因是大多數的中文譯文里即把Attribute譯為“屬性”,也把Property譯為“屬性”,其實,這兩個詞表示的不是同一個層面上的東西。


    ? ??Property屬于面向對象的范疇。在使用面向對象編程的時候,常常需要對客觀事物進行抽象,在把抽象出來的結果封裝成類,類中用來表示事物狀態的成員就是Property。比如要編寫一個模擬賽車的游戲,那么必不可少的就是要對現實的賽車進行抽象,現實中汽車會帶很多數據,但是游戲中可能只關心它的長度,寬度,高度,重量,速度等有限的幾個數據,同時,還會把汽車的加速,減速等行為提取出來用算法進行模擬,這個過程就是屬于抽象(結果是Car這個類)。顯然,Car.Length,Car.Height,Car.Weight等表達的是當前汽車所處的一個狀態,而Car.Accelerate()、Car.Break()表達的是汽車能做什么。因此,Car.Length,Car.Height就是Property的典型屬性,是針對對象而言的。將Property譯為“屬性”也很貼切,總之一句話:Property屬性是針對對象而言的。


    ? ??Attribute則是編程語言文法層面的東西。比如有兩個同類語法的元素A和B,為了表示A與B不完全相同或者A與B的用法上有些區別,這時候就要針對A和B加一些Attribute。也就是說Attribute只與語言層面上的東西有關,與抽象出來的對象沒有什么關系。因為Attribute是為了表示“區分”的。所以它譯為“特征”。C#中的Attribute就是這種應用的典型例子,我們可以為一個類添加Attribute,這個類里面有很多Property(屬性)。顯然,Attribute只用來影響類中程序中的用法,而Property 則對應著抽象對象身上的性狀,根本不是一個層面上的東西。


    ? ? 習慣上,英語中把標簽式語言中表示一個標簽特征的“名----值”對稱做Attribute。如果恰好有在使用一種標簽式語言做面向對象編程,這兩個概念就有可能混在一起了。實際上,使用能夠使用面向對象編程的標簽式語言只是把標簽和對象做了一個映射-----針對標簽還是叫做Attribute,針對對象還是叫做Property,仍然不是一個層面上的東西。而且,標簽的Attribute不是和對象的Property一一映射的,往往一個標簽對于的Atrribute大于他所映射對象的Property。


    ? ? 因為XAML是用來在UI上繪制控件的,而控件本身就是面向對象的抽象產物,所以XAML標簽中的Atrribute有一大部分和它對應他的對象的Property是一一對應的。當然,這還意味著標簽中的Atrribute并不對應它所代表對象的Property。


    ? ? 明白了XAML的格式以及Atrribute和Property之間對應的關系,對上面的代碼可謂是一目了然。它的總體結構是一個Window標簽內包含一個Grid標簽(或者說Grid標簽是Window標簽的內容),所代表的內容是一個Window對象里面包含一個Grid對象。


    ? ??XAML是一種聲明式語言,當你看見一個標簽,就證明你聲明了一個對象,對象之間的關系要么是并列,包含全都體現在標簽的關系上。
    下面的代碼就是<Window>標簽的Atrribute。

    [html]?view plain?copy
  • x:Class="MyFirstApplication.MainWindow??
  • xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation??
  • xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml??
  • Title="MainWindow"?Height="350"?Width="525"??

  • ? ? ?其中Title、Width、Height一看就知道和Window的Property對象對應的。中間兩行(即兩個xmlns)是在聲明名稱空間。最上面一行是在使用名為class的Attribute, 這個Attribute來自于X:前綴所對應的名稱空間 。下面仔細解釋。


    ? ? 前面已經說過,XMAL語言是從XML語言派生而來的。XML有一個功能就是可以在XML文檔的標簽內使用xmlns特征來定義名稱空間(NameSpace),XML也就是XML--NameSpace的縮寫。定義名稱空間的好處就是,當來源不同的類重名時,可以使用名稱空間加以區分。xmlns特征的語法如下:

    [html]?view plain?copy
  • xmlns[:可選的映射前綴]=“名稱空間”??

  • ? ? ??xmlns后可以跟一個可選的映射前綴,之間用冒號隔開。如果沒有寫可選映射的前綴,那就意味著所有來自這個名稱空間的所有標簽都不用加這個前綴,這個沒有映射的命名空間稱為“默認的命名空間”,默認名稱空間只能有一個,而且應該選擇其中使用最頻繁的名稱空間來作為默認命名空間。在上面的例子中,<Window>和<Grid>來自于第二行聲明的默認命名空間,而第一樣的CLASS特征則來來自于三行的中x:前綴對應的名稱空間。這里可以做一個有趣的小實驗:如果給第二行聲明的名稱空間加一個前綴,例如n,那么代碼必須要改成一下形式編譯才能通過:

    [html]?view plain?copy
  • <n:Window?x:Class="WpfApplication2.Window2"????
  • ????????xmlns:n="http://schemas.microsoft.com/winfx/2006/xaml/presentation"????
  • ????????xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"????
  • ????????Title="Window2"?Height="300"?Width="300">????
  • ????<n:Grid>????
  • ????????????
  • ????</n:Grid>????
  • </n:Window>??

  • ? ?? ?XAML中引用外來程序集和其中.NET名稱空間的語法和C#是不一樣的。在C#中,如果想使用System.Windows.Control名稱空間內的Button類,需要先把包含System.Windows.Control名稱空間的程序集PresentationFramework.dll添加引用到項目中,然后再用C#代碼頂部寫上一句:using System.Windows.Control;。

    在XAML中做同樣的事情也需要添加對程序集的引用,然后再在根元素的起始標簽中寫上一句:xmlns:c="clr-namespace:System.Windows.Control;assembly=PresentationFramework"。c是映射的前綴,換成其它字符串也可以。因為button來自前綴為c的命名空間,所以在使用button的時候就要使用<c:Button>....</c:Button>。

    ? ? xmlns:c="clr-namespace:System.Windows.Control;assemble=PresentationFramework",這么長的一串字符串看上去的確有點恐怖,但不用擔心,VS中有自動提示功能。
    在VS自動提示的頂部,你會看到幾個像網站地址的幾個名稱空間,其中就包含例子代碼中的那兩行。為什么名稱空間看上去像一個網站地址呢。其實把它copy到瀏覽器地址欄嘗試跳轉也不會打開網頁。這里只是XAML解釋器的一個硬性編碼(hard-coding),只要見到這些固定的字符串,就會把一系列的程序集和程序集中包含的名稱空間引入進來。


    ? ? 默認引入的這兩個名稱空間格外的重要,它們對應的程序集和.net名稱空間如下:

    ? ? http://schemas.microsoft.com/winfx/2006/xaml/presentation對應:

    [html]?view plain?copy
  • System.Windows;??
  • System.Windows.Automation;??
  • System.Windows.Control;??
  • System.Windows.Control.Primitives;??
  • System.Windows.Data;??
  • System.Windows.Document;??
  • System.Windows.Forms.Intergration;??
  • System.Windows.Ink;??
  • System.Windows.Input;??
  • System.Windows.Media;??
  • System.Windows.Media.Animation;??
  • System.Windows.Media.Effects;??
  • System.Windows.Media.Imaging;??
  • System.Windows.Media.Media3D;??
  • System.Windows.Media.TextFormmatting;??
  • System.Windows.Navigation;??
  • System.Windows.Shapes;??

  • ? ? ?也就是說你可以在XAML中可以直接使用這些CLR名稱空間下的類型(因為默認XML名稱空間前沒有前綴)。
    ? ??

    ? ? http://schemas.microsoft.com/winfx/2006/xaml則對應一些與XAML語法和編譯相關的CLR名稱空間, 使用這些名稱空間中的類型需要加上前綴x,因為它們被映射到x的XML名稱空間中。


    ? ? 從這兩個名稱空間的名字和它所對應的.NET程序集上,這個不難看出,第一個空間名稱對應的是繪制UI相關的程序集,是表示(Presentation)層面上的東西;第二個名稱空間則對應著XAML解析處理相關的程序集,是語言層面上的東西。


    ? ? ?最后讓讓我回到最初的代碼。你可能會問:在XAML里面有x:Class="MyFirstApplication.MainWindow",在MainWindow.xaml.cs里面也聲明了MainWindow這個類,難道他們不會沖突嗎?仔細看看MainWindow.xaml.cs中MainWindow的聲明就知道了----在聲明的時候使用的是partial關鍵字,這樣,這樣由XAML中解析成的類和C#文件里面定義的部分就合二為一了,正是由于這種partial機制,我們可以把邏輯代碼留在.cs文件里,用C#語言來實現,而把那些聲明及布局UI元素的代碼分離出去,實現UI和邏輯分離,并且,用于繪制UI的代碼(如聲明控件類型的字段,設置它們的外觀和布局等)也不必再使用C#語言,使用XAML和XAML編輯工具就可以輕松搞定。


    參考《深入淺出WPF》


    總結

    以上是生活随笔為你收集整理的WPF XAML 从零开始认识XAML的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。