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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

XAML实例教程系列 - 命名空间(NameSpace) 三

發(fā)布時(shí)間:2024/4/15 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 XAML实例教程系列 - 命名空间(NameSpace) 三 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

XAML實(shí)例教程系列 - 命名空間(NameSpace)

2012-05-28 14:14 by jv9,?2205?閱讀,?10?評(píng)論,?收藏,?編輯

上一篇曾提及XAML中,每個(gè)對(duì)象元素的聲明是對(duì).NET類進(jìn)行一次實(shí)例化操作。XAML作為聲明類語言,如何識(shí)別對(duì)象元素,并如何在.NET Framework中找到對(duì)應(yīng)映射類呢?本篇將引入命名空間(NameSpace)的概念,涉及內(nèi)容如下:

  • NameSpace命名空間格式
  • 核心NameSpace命名空間
  • 設(shè)計(jì)類NameSpace命名空間
  • 自定義NameSpace命名空間
  • XAML命名空間的x:Class屬性
  • XAML命名空間的x:Name屬性和x:Key屬性
  • XAML的x:ClassModifier屬性和x:FieldModifier屬性
  • Silverlight命名空間和Windows 8命名空間的不同
  • XAML命名空間的概念和C#代碼中的Using,VB.Net代碼中的Import相似,其作用是為對(duì)象元素的實(shí)例化提供引用類庫聲明。

    簡單的理解,當(dāng)在XAML頁面中需要調(diào)用某控件對(duì)象時(shí),需要提前對(duì)該控件對(duì)象的類庫進(jìn)行引用聲明,而定義XAML命名空間是類庫引用聲明的一種方法。

    本篇將使用Visual Studio?11創(chuàng)建一個(gè)簡單的Silverlight 5項(xiàng)目,通過對(duì)比Windows 8和Silverlight項(xiàng)目的命名空間,幫助理解命名空間的使用。

    項(xiàng)目名:XamlGuideSL

    ?

    ?

    ?

    Visual Studio 11生成的Silverlight 5默認(rèn)命名空間代碼如下:

    對(duì)比上一篇Windows 8實(shí)例的命名空間代碼:

    ?

    通過比較以上兩個(gè)命名空間定義,我們可以發(fā)現(xiàn)Windows 8和Silverlight 5具有類似的命名空間,例如:

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

    xmlns:mc=http://schemas.openxmlformats.org/markup-compatibility/2006

    在移植Silverlight項(xiàng)目到Windows 8平臺(tái)過程中,WinRT XAML可以兼容Silverlight XAML代碼,輕松實(shí)現(xiàn)應(yīng)用平臺(tái)移植。

    NameSpace命名空間格式

    在以上代碼中<UserControl>或<Page>作為頁面Root對(duì)象元素被聲明,其開始標(biāo)簽<UserControl>或<Page>中,包含了多個(gè)“xmlns”特性,在XAML語法規(guī)則中,“xmlns”是屬于強(qiáng)制關(guān)鍵字,被用來聲明一個(gè)命名空間。其語法結(jié)構(gòu)為“xmlns:”+“命名空間前綴名”,而對(duì)于默認(rèn)命名空間,無需定義命名空間前綴名。
    ?


    ? xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

    以上四個(gè)命名空間是Visual Studio 11創(chuàng)建默認(rèn)項(xiàng)目時(shí)自動(dòng)生成的,其中分別映射了實(shí)例化一個(gè)Silverlight或Windows 8空白頁面所需要的公共類庫。

    ?

    核心NameSpace命名空間

    在以上四個(gè)命名空間中,“xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"”和“xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"”是一個(gè)XAML頁面的核心命名空間,

    對(duì)于這兩個(gè)命名空間的詳細(xì)解釋如下:

    • xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"是默認(rèn)命名空間,其中包含Silverlight或Windows 8核心類,提供兩者基礎(chǔ)應(yīng)用元素支持,作為核心類庫命名空間,無需定義命名空間前綴名,該命名空間默認(rèn)作用于整個(gè)頁面,從上述代碼中可以看出<UserControl>,<Page>都屬于該命名空間下的元素對(duì)象。作為默認(rèn)命名空間,直接映射多個(gè).Net Framework核心類庫,例如,System.Windows, System.Windows.UIElements, System.Windows.Controls 等類庫。
    • xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"引用默認(rèn)XAML類庫,其中包含大量XAML語言通用功能類,其作用對(duì)頁面XAML提供基礎(chǔ)以及擴(kuò)展功能支持。這個(gè)命名空間使用“x”作為前綴名,表示在XAML頁面中可以使用“x:”引用該類庫。其常用語法結(jié)構(gòu)如下:<x:元素名 />。例如: <Grid x:Name=“LayoutRoot”/>

    ?一個(gè)完整的XAML頁面必須具備以上兩個(gè)命名空間,否則將無法正常實(shí)例化。

    ?

    設(shè)計(jì)類NameSpace命名空間

    在設(shè)計(jì)XAML頁面時(shí),Visual Studio和Expression Blend同樣需要XAML命名空間支持,幫助實(shí)現(xiàn)設(shè)計(jì)工具內(nèi)的視圖設(shè)計(jì)模式。所用到的默認(rèn)命名空間如下:
    • xmlns:d=http://schemas.microsoft.com/expression/blend/2008,該命名空間引用Expression Blend輔助設(shè)計(jì)類庫,對(duì)Visual Studio和Expression Blend視圖設(shè)計(jì)模式提供支持,其實(shí)際設(shè)計(jì)中主要提供設(shè)計(jì)視圖頁面尺寸定制。
    • xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006",該命名空間引用XAML語言輔助類庫,對(duì)XAML提供輔助設(shè)計(jì)支持,主要功能是為XAML語法解析器提供輔助解釋功能,例如,使用mc:Ignorable=“d”告知XAML解析器以“xmlns:d”為前綴的元素引用在運(yùn)行時(shí)被忽略。從前文代碼中可以看到,xmlns:d命名空間前綴名,使用Expression Blend輔助設(shè)計(jì)類庫中的DesignHeight和DesignWidth,分別定義在設(shè)計(jì)工具下視圖模式中頁面顯示尺寸,d:DesignHeight="300" d:DesignWidth="400"。正常來說,XAML語法解析器無法識(shí)別DesignHeight和DesignWidth,xmlns:mc命名空間則提供Ignorable標(biāo)識(shí)在運(yùn)行時(shí)忽略該引用聲明,避免了在編譯時(shí)XAML語法報(bào)錯(cuò)。

    自定義NameSpace命名空間

    在實(shí)際項(xiàng)目中,經(jīng)常會(huì)遇到調(diào)用自定義控件類庫,其調(diào)用方法可以從默認(rèn)XAML命名空間聲明轉(zhuǎn)換得來。

    例如,如果需要添加DataGrid數(shù)據(jù)控件到XamlGuideSL項(xiàng)目中,首先需要添加System.Windows.Controls.Data.dll引用文件到Silverlight項(xiàng)目引用文件目錄,


    ?

    ?

    然后在頁面頭部聲明DataGrid控件所需要的命名空間,XAML頁面才能在.Net Framework中初始化該控件。

    ?

    ?

    從上圖可以看出,添加命名空間引用時(shí),Visual Studio 11自動(dòng)智能感知,查詢當(dāng)前引用類庫列表中所有可用引用,選擇“System.Windows.Controls”,代碼將自動(dòng)填充到XAML頁面。


    ?

    ?

    自定義聲明一個(gè)命名空間:xmlns:datagrid="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"這段代碼中包含三部分的信息:

  • “xmlns:datagrid”命名空間前綴名,這個(gè)前綴名可以由開發(fā)人員自定義,但是必須由“xmlns:”作為起始,也就是說,datagrid可以被任何字符替換。根據(jù)開發(fā)命名標(biāo)準(zhǔn),推薦開發(fā)人員使用簡單的控件名表示,提高代碼可讀性;
  • “clr-namespace:System.Windows.Controls”表示該命名空間將映射到System.Windows.Controls 公共語言運(yùn)行環(huán)境命名空間類;
  • “assembly=System.Windows.Controls.Data"”表示DataGrid隸屬于System.Windows.Controls.Data.dll動(dòng)態(tài)連接庫中,在編譯時(shí),該DLL文件將被封裝到XAP壓縮文件包中。
  • 完成聲明后,調(diào)用方法如下:

    <datagrid:DataGrid />

    在本篇實(shí)例中,使用Expression Blend生成Sample DataSource,綁定到DataGrid控件作為演示(具體步驟這里不再重復(fù),可參考:Expression Blend實(shí)例中文教程(6) - 項(xiàng)目控件和用戶交互控件快速入門),最終調(diào)用和顯示效果如下:

    ?

    XAML命名空間的x:Class屬性

    Silverlight和基于C#,VB.NET的Windows 8 Metro應(yīng)用是用戶界面代碼和后臺(tái)邏輯代碼分離的。其中XAML代碼用于繪制用戶界面,后臺(tái)邏輯代碼可由開發(fā)人員喜好選擇C#或者Visual Basic。XAML既然繼承自XML,也就是說, 其本身不具備事件控制的代碼特性。而為了使XAML能夠?qū)崿F(xiàn)與后臺(tái)邏輯代碼交互,則需要在XAML頁面代碼開始時(shí)聲明x:Class屬性,使其賦值當(dāng)前頁面對(duì)應(yīng)后臺(tái)頁面命名空間,Runtime語法解析器將根據(jù)x:Class提供的頁面命名空間名自動(dòng)創(chuàng)建一個(gè)類,該類繼承自x:Class屬性隸屬對(duì)象元素。完成類創(chuàng)建后,將判斷是否該頁面是否具有同名后臺(tái)代碼類,如果有,將合并當(dāng)前生成類到后臺(tái)代碼類中。XAML的x:Class屬性只能在頁面的根元素中聲明一次,表示在頁面創(chuàng)建時(shí),保證其包含的所有元素對(duì)象僅能被實(shí)例化一次。其聲明語法格式如下:

    <元素對(duì)象 x:Class=“命名空間.調(diào)用類名;assembly=程序集名稱”…>

    </元素對(duì)象>

    下面我們嘗試從實(shí)例中理解x:Class屬性,在XamlGuideSL項(xiàng)目中,<UserControl>定義x:Class="XamlGuideSL.MainPage", 其含義是該XAML頁面繼承自UserControl對(duì)象元素,其對(duì)應(yīng)的后臺(tái)代碼頁面為“XamlGuideSL.MainPage.cs”,XAML語法解析器將自動(dòng)檢測并且鏈接該XAML頁面到“XamlGuideSL.MainPage.MainPage.cs”,在XAML實(shí)例化時(shí),將執(zhí)行“XamlGuideSL.MainPage.cs”后臺(tái)代碼中的構(gòu)造函數(shù)。


    ?

    ?

    從Visual Studio 11默認(rèn)生成后臺(tái)代碼中可以看出當(dāng)前頁面命名空間是“XamlGuideSL”,Mainpage類繼承自UserControl。在構(gòu)造函數(shù)MainPage()中,將執(zhí)行InitializeComponent()方法,對(duì)XAML頁面對(duì)象元素進(jìn)行屬性設(shè)置,數(shù)據(jù)綁定以及聲明事件等操作。由此可見,InitializeComponent()方法在Silverlight應(yīng)用初始化時(shí)具有非常重要的作用,不能從構(gòu)造函數(shù)中刪除。而在創(chuàng)建新的構(gòu)造函數(shù)時(shí),也必須調(diào)用該方法,對(duì)XAML對(duì)象元素進(jìn)行實(shí)例化操作。

    ?

    XAML命名空間的x:Name屬性和x:Key屬性

    在XAML代碼設(shè)計(jì)時(shí),經(jīng)常需要對(duì)控件或者資源進(jìn)行命名,所需要使用的屬性是x:Name和x:Key。下面的表格對(duì)兩者使用范圍進(jìn)行對(duì)比和描述:

    在實(shí)際項(xiàng)目中,控件元素和資源的命名規(guī)則是只在需要的時(shí)候?qū)丶唾Y源進(jìn)行命名操作,這樣的好處有以下幾點(diǎn):?

  • 減小XAP文件或應(yīng)用尺寸,加快InitializeComponent初始化調(diào)用速度;
  • 易于項(xiàng)目維護(hù);
  • ?

    XAML的x:ClassModifier屬性和x:FieldModifier屬性

    x:ClassModifier屬性和x:FieldModifier屬性主要功能是支持在XAML中設(shè)置后臺(tái)對(duì)應(yīng)代碼類存取屬性.

    ?

    x:ClassModifier屬性僅能被用于根元素對(duì)象,例如,<UserControl>;

    x:FieldModifier屬性僅能被用于控件元素對(duì)象,例如,<TextBox>;

    ?

    在XAML代碼中使用x:ClassModifier屬性和x:FieldModifier屬性后,客戶端編譯后,會(huì)在.g.cs或者.g.vb自動(dòng)生成代碼中重新設(shè)置類存取屬性。這里需要注意,對(duì)于x:ClassModifier根元素對(duì)象類存取屬性的控制,在XAML代碼中修改后,必須同時(shí)手工修改對(duì)應(yīng)后臺(tái)代碼中對(duì)應(yīng)元素對(duì)象類的存取屬性。例如:在下面代碼中修改UserControl類存取屬性為internal,


    ?

    同時(shí)也需要修改對(duì)應(yīng)后臺(tái)代碼XamlGuideSL.MainPage類的存取屬性,Visual Studio 11默認(rèn)創(chuàng)建屬性為Public,


    ?

    查看.g.cs自動(dòng)生成代碼,

    MainPage的類存取屬性被編譯為internal。

    由此,x:FieldModifier屬性的使用不需要手工修改對(duì)應(yīng)控件后臺(tái)代碼存取屬性,直接由XAML設(shè)置即可。

    ?

    Silverlight命名空間和Windows 8命名空間的不同

    例如,我們將添加新的引用“MyAssembly.dll”到項(xiàng)目,并且添加新的命名空間"MyAssembly.MyNamespace"到XAML代碼, 在Silverlight中,命名空間定義:

    xmlns:local="clr-namespace:MyAssembly.MyNamespace;assembly:MyAssembly"

    在Windows 8中,命名空間將使用“using”替換“clr-namespace“,

    xmlns:local="using:MyAssembly.MyNamespace"

    ?

    今天暫時(shí)介紹到這里,歡迎留言討論。

    源代碼下載

    歡迎大家留言交流,或者加入QQ群交流學(xué)習(xí):

    22308706(一群) 超級(jí)群500人?
    37891947(二群) 超級(jí)群500人?
    100844510(三群) 高級(jí)群200人?
    32679922(四群) 超級(jí)群500人?
    23413513(五群) 高級(jí)群200人?
    32679955(六群) 超級(jí)群500人?
    88585140(八群) 超級(jí)群500人?
    128043302(九群 企業(yè)應(yīng)用開發(fā)推薦群) 高級(jí)群200人?
    101364438(十群) 超級(jí)群500人?
    68435160(十一群 企業(yè)應(yīng)用開發(fā)推薦群)超級(jí)群500人

    分類:?Silverlight,?Windows 8,?Windows Phone,?WPF 標(biāo)簽:?Silverlight,?windows phone,?WPF,?windows 8,?metro 原文引入:http://www.cnblogs.com/jv9/archive/2012/05/28/2520731.html

    轉(zhuǎn)載于:https://www.cnblogs.com/meimao5211/p/3348879.html

    總結(jié)

    以上是生活随笔為你收集整理的XAML实例教程系列 - 命名空间(NameSpace) 三的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。