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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

基本 XAML 语法指南

發(fā)布時間:2023/12/10 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基本 XAML 语法指南 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

我們介紹了 XAML 語法規(guī)則,以及用于描述 XAML 語法中存在的限制或選項的術(shù)語。當出現(xiàn)以下情況時你會發(fā)現(xiàn)本主題很有用:不熟悉 XAML 語言的使用,希望加強對術(shù)語或某些語法部分的理解,或者對 XAML 語言的工作原理感興趣,因而希望了解更多背景知識。

XAML 是 XML

XAML 的基本語法基于 XML,且定義有效的 XAML 必須也是有效的 XML。但是,XAML 也有自己的用來擴展 XAML 的語法概念。給定的 XML 實體可能在純 XML 中有效,但該語法在 XAML 中可能具有不同且更加完整的含義。本主題介紹這些 XAML 語法概念。

XAML 詞匯

XAML 與大部分 XML 用法之間的一大區(qū)別在于,XAML 通常并非通過架構(gòu)(如 XSD 文件)執(zhí)行。這是因為 XAML 具有固有的可擴展性,在 Extensible Application Markup Language (XAML) 的縮略詞中,"X" 正是此意。在對 XAML 進行分析后,發(fā)現(xiàn)你在 XAML 中引用的元素和屬性預(yù)期將以某種支持代碼表示的形式存在,要么是由 Windows 運行時定義的核心類型,要么是擴展的類型或基于 Windows 運行時的類型。有時 SDK 文檔引用的類型已經(jīng)內(nèi)置到 Windows 運行時,并且作為 Windows 運行時的?XAML 詞匯,可以在 XAML 中使用。Microsoft Visual Studio 可幫助你生成在此 XAML 詞匯中有效的標記。 Visual Studio 還可以包含適用于 XAML 的自定義類型,只需在項目中正確引用這些類型的源即可。有關(guān) XAML 和自定義類型的詳細信息,請參閱?XAML 命名空間和命名空間映射。

聲明對象

程序員常常從對象和成員方面思考,而標記語言已概念化為各種元素和屬性。在大部分基本場景中,在 XAML 標記中聲明的元素會變?yōu)橹С诌\行時對象表示中的對象。若要為應(yīng)用創(chuàng)建運行時對象,需要在 XAML 標記中聲明一個 XAML 元素。當 Windows 運行時加載 XAML 時,會創(chuàng)建該對象。

一個 XAML 文件始終只有一個用作根的元素,該元素聲明的對象將在概念上作為一些編程結(jié)構(gòu)的根,這些結(jié)構(gòu)包括頁面或一個應(yīng)用程序完整運行時定義的對象圖等。

對于 XAML 語法,可采用 3 種方式在 XAML 中聲明對象:

  • 直接方式,使用對象元素語法:該方式使用起始和結(jié)束標記將一個對象實例化為 XML 格式的元素。你可以使用此語法聲明根對象或創(chuàng)建可設(shè)置屬性值的嵌套對象。
  • 間接方式,使用屬性語法:該方式使用一個內(nèi)聯(lián)字符串值,該值中包含有關(guān)如何創(chuàng)建對象的說明。XAML 分析程序使用該字符串將屬性值設(shè)置為新創(chuàng)建的引用值。 對于它的支持僅限于某些常見對象和屬性。
  • 使用一種標記擴展。

這并不意味著你始終可以選擇任何語法來在 XAML 詞匯表中創(chuàng)建對象。一些對象只能使用對象元素語法創(chuàng)建,一些對象只能通過最初在屬性中設(shè)置來創(chuàng)建。事實上,可使用對象元素或?qū)傩哉Z法創(chuàng)建的對象在 XAML 詞匯表中相對較少。即使這兩種語法形式都可用,其中一種語法樣式也將更常見。

還可在 XAML 中使用一些技術(shù)來引用現(xiàn)有的對象,而不是創(chuàng)建新值。現(xiàn)有對象可以在其他 XAML 區(qū)域定義,也可以通過平臺的某種行為和它的應(yīng)用程序或編程模型顯式存在。

使用對象元素語法聲明對象

若要使用對象元素語法聲明對象,可以編寫類似于?<objectName> </objectName>?的標記,其中?objectName?是你希望實例化的對象的類型名稱。下面說明如何使用元素來聲明?Canvas?對象:

<Canvas> </Canvas>

如果一個對象不包含其他對象,可以使用一個自結(jié)束標記代替起始/結(jié)束標記對來聲明對象元素:<Canvas />

容器

許多用作 UI 元素的對象(例如?Canvas)可包含其他對象。 這些對象有時稱作容器。下面的示例顯示了一個?Canvas?容器,該容器僅包含一個元素對象,即?Rectangle

<Canvas><Rectangle /> </Canvas>

使用屬性語法聲明對象

由于此行為綁定到屬性設(shè)置,因此我們將在接下來的幾個部分中深入討論這一點。

初始化文本

對于某些對象,可以使用將用作構(gòu)造初始化值的內(nèi)部文本來聲明新值。在 XAML 中,這種技術(shù)和語法稱為初始化文本。在概念上,初始化文本與調(diào)用具有參數(shù)的構(gòu)造函數(shù)相似。 初始化文本對設(shè)置某些結(jié)構(gòu)的初始值很有用。

如果想要一個具有?x:Key?值并因此可存在于?ResourceDictionary?中的結(jié)構(gòu)實例,通常會使用具有初始化文本的對象元素語法。如果你要在多個目標屬性之間共享該結(jié)構(gòu)值,你可能會這么做。對于某些結(jié)構(gòu),無法使用屬性語法設(shè)置結(jié)構(gòu)的值:初始化文本是生成有用而且可共享的?CornerRadiusThicknessGridLength?或?Color?資源的唯一方式。

這個簡短示例使用初始化文本來指定?Thickness?的值,在本例中指定的值將?Left?和?Right?都設(shè)置為 20,將?Top?和Bottom?都設(shè)置為 10。此示例顯示了創(chuàng)建為鍵資源的?Thickness,還給出了該資源的引用。 有關(guān)?Thickness?初始化文本的詳細信息,請參閱?Thickness

?

<UserControl ...><UserControl.Resources><Thickness x:Key="TwentyTenThickness">20,10</Thickness>....</UserControl.Resources>...<Grid Margin="{StaticResource TwentyTenThickness}">...</Grid> </UserControl ...>

?

注意??一些結(jié)構(gòu)可以聲明為對象元素。初始化文本不受支持,而且不能用作資源。你必須使用屬性語法才能在 XAML 中將屬性設(shè)置為這些值。這些類型包括:DurationRepeatBehaviorPointRect?和?Size

設(shè)置屬性

你可以在使用對象元素語法聲明的對象上設(shè)置屬性。可采用多種方式在 XAML 中設(shè)置屬性:

  • 使用屬性語法。
  • 使用屬性元素語法。
  • 使用元素語法,其中的內(nèi)容(內(nèi)部文本或子元素)用于設(shè)置對象的 XAML 內(nèi)容屬性。
  • 使用集合語法(通常是隱式的集合語法)。

正如對于對象聲明一樣,此列表并不意味著可以使用所有的技術(shù)來設(shè)置屬性。一些屬性僅支持一種技術(shù)。

一些屬性(例如,可以使用屬性元素語法或特性語法的屬性)可能支持多種技術(shù)。可能的技術(shù)同時取決于屬性和該屬性所使用的對象類型。在 Windows 運行時 API 引用中,你在“語法”部分將會看到可以使用的 XAML 用法。有時還有可行的備用用法,但可能會比較繁瑣。我們通常不會顯示這些繁瑣用法,因為我們會盡量向你展示在 XAML 中使用該屬性的最佳做法或?qū)嵱梅桨浮τ诳稍?XAML 中設(shè)置的屬性,已在其參考頁面中有關(guān)“XAML 用法”的部分提供了供參考的 XAML 語法。

還有一些對象屬性無法通過任何方式在 XAML 中設(shè)置,所以只能使用代碼設(shè)置。這些屬性通常更適于在代碼隱藏文件中(而非 XAML 中)處理。

只讀屬性不能在 XAML 中設(shè)置。即使在代碼中,自有類型將必須支持一些其他方式(如構(gòu)造函數(shù)重載、幫助程序方法或?qū)τ嬎銓傩缘闹С?#xff09;才能進行設(shè)置。計算的屬性依賴于其他可設(shè)置屬性的值,有時還依賴具有內(nèi)置處理的事件;這些功能在依賴屬性系統(tǒng)中可用。有關(guān)依賴屬性如何用于支持計算屬性的詳細信息,請參閱依賴屬性概述。

XAML 中的集合語法給人一種設(shè)置只讀屬性的感覺,但其實不是。請參閱本文稍后部分中的“使用集合語法設(shè)置屬性”部分。

使用屬性語法設(shè)置屬性

設(shè)置特性值是在標記語言中設(shè)置屬性值的典型方法,例如在 XML 或 HTML 中。設(shè)置 XAML 屬性與在 XML 中設(shè)置屬性值相似。屬性名稱在元素名稱之后的標記內(nèi)的任意點指定,與元素名稱之間至少間隔一個空格。屬性名稱之后是一個等號。屬性值包含在一對引號內(nèi)。引號既可以是雙引號,也可以是單引號,只要兩個引號相匹配并包含值即可。屬性值本身必須可表示為字符串。字符串通常包含數(shù)字,但是對于 XAML,除非涉及到 XAML 分析程序而且該分析程序執(zhí)行了一些基本的值轉(zhuǎn)換,否則所有的屬性值都是字符串值。

此示例為 4 個屬性使用屬性語法來設(shè)置?Rectangle?對象的?NameWidthHeight?和?Fill

<Rectangle Name="rectangle1" Width="100" Height="100" Fill="Blue" />

使用屬性元素語法設(shè)置屬性

一個對象的許多屬性可使用屬性元素語法設(shè)置。屬性元素看上去如下所示:<object.property>。

若要使用屬性元素語法,需要為想要設(shè)置的屬性創(chuàng)建 XAML 屬性元素。在標準 XML 中,此元素僅被視為一個名稱中包含一個點的元素。但是在 XAML 中,元素名稱中的這個點將該元素標識為屬性元素,property?應(yīng)該是支持對象模型實現(xiàn)中的?object?的一個成員。若要使用屬性元素語法,必須可指定一個對象元素,才能“填充”屬性元素標記。屬性元素將始終具有一些內(nèi)容(單個元素、多個元素或內(nèi)部文本);任何點都不具有自結(jié)束屬性元素。

在下面的語法中,property?是你想要設(shè)置的屬性的名稱,propertyValueAsObjectElement?是應(yīng)當滿足屬性的值類型要求的單個對象元素。

<object><object.property>propertyValueAsObjectElement</object.property></object>

下面的示例使用屬性元素語法來設(shè)置一個具有?SolidColorBrush?對象元素?Rectangle?的?Fill。(在?SolidColorBrush內(nèi),Color?設(shè)置為一個屬性。)此 XAML 的分析結(jié)果等同于前面使用屬性語法設(shè)置?Fill?的 XAML 示例。

<RectangleName="rectangle1"Width="100" Height="100" > <Rectangle.Fill> <SolidColorBrush Color="Blue"/> </Rectangle.Fill> </Rectangle>

XAML 詞匯和面向?qū)ο蟮木幊?/h3>

顯示為 Windows 運行時 XAML 類型的 XAML 成員的屬性和事件通常是從基本類型繼承的。看看下面的示例:<Button Background="Blue" .../>。Background?屬性不是在?Button?類上直接聲明的屬性。相反,Background?是從基本Control?類繼承的。 實際上,如果你查看?Button?的參考主題,你將看到成員列表中至少包含一個從一系列連續(xù)的基本類中的每個類繼承的成員:ButtonBaseControlFrameworkElementUIElement?和?DependencyObject。從 XAML 詞匯意義上講,“屬性”列表中所有的讀寫屬性和集合屬性都是繼承的。事件(如各種?UIElement?事件)也是繼承的。

如果你使用 Windows 運行時參考來進行 XAML 指導(dǎo),則語法或示例代碼中顯示的元素名稱有時針對的是最初定義該屬性的類型,這是因為該參考主題是從基本類繼承它的所有可能類型共享。如果你在 XML 編輯器中使用 Visual Studio 的用于 XAML 的 Microsoft IntelliSense,則 IntelliSense 及其下拉菜單能夠很好地合并繼承功能,并提供一個準確的屬性列表,一旦你開始使用用于類實例的對象元素,這些屬性就可供設(shè)置。

XAML 內(nèi)容屬性

一些類型定義其某個屬性,這樣該屬性才能支持 XAML 內(nèi)容語法。對于某種類型的 XAML 內(nèi)容屬性,在 XAML 中指定它時可以省略它的屬性元素。或者,你可以將該屬性設(shè)置為內(nèi)部文本值,方法是直接在擁有類型的對象元素標記中提供該內(nèi)部文本。XAML 內(nèi)容屬性對于該屬性支持簡單的標記語法,并通過減少嵌套使 XAML 更容易讓人理解。

如果有一種 XAML 內(nèi)容語法可用,Windows 運行時參考文檔中針對該屬性“語法”的“XAML”部分將提供該語法。 例如,Border?的?Child?屬性頁顯示了用來設(shè)置?Border?的單對象?Border.Child?值的 XAML 內(nèi)容語法(而不是屬性元素語法),如下所示:

<Border><Button .../> </Border>

如果聲明為 XAML 內(nèi)容屬性的屬性的類型為?Object?或?String,則 XAML 內(nèi)容語法支持 XAML 內(nèi)容模型中的主要內(nèi)部文本:一個位于起始和結(jié)束對象標記之間的字符串。例如,TextBlock?的?Text?屬性頁顯示的 XAML 內(nèi)容語法將一個內(nèi)部文本值設(shè)置為?Text,但是字符串 "Text" 從未出現(xiàn)在標記中。下面是一個示例用法:

<TextBlock>Hello!</TextBlock>

如果某個類存在一個 XAML 內(nèi)容屬性,則這會在該類的參考主題的“屬性”部分指示出來。查找ContentPropertyAttribute?的值。此屬性使用一個名為 "Name" 的命名字段。"Name" 的值是該類的作為 XAML 內(nèi)容屬性的屬性的名稱。例如,在?Border?參考頁上,你將看到如下內(nèi)容:ContentProperty("Name=Child")。

有一個重要的 XAML 語法規(guī)則需要引起我們的注意,那就是不能將 XAML 內(nèi)容屬性和你在該元素上設(shè)置的其他屬性元素混用。XAML 內(nèi)容屬性必須在所有其他屬性元素之前或之后完全設(shè)置。例如,下面的 XAML 無效:

<StackPanel><Button>This example</Button><StackPanel.Resources><SolidColorBrush x:Key="BlueBrush" Color="Blue"/></StackPanel.Resources><Button>... is illegal XAML</Button> </StackPanel>

集合語法

目前為止給出的所有語法都將屬性設(shè)置為單一對象。但是,許多 UI 場景要求一個給定的父元素可擁有多個子元素。例如,一個輸入窗體的 UI 需要多個文本框元素、一些標簽以及可能一個 "Submit" 按鈕。如果打算使用一種編程對象模型訪問多個這樣的元素,它們通常是單個集合屬性中的項,并非每個項都是不同屬性的值。XAML 支持多個子元素,還支持一種典型的支持集合模型,將使用集合類型的屬性視為隱式的,并對一個集合類型的任何子元素執(zhí)行特殊處理。

許多集合屬性還被標識為類的 XAML 內(nèi)容屬性。隱式集合處理/XAML 內(nèi)容語法組合在用于控件組合(如面板、視圖或項目控件)的類型中經(jīng)常看到。例如,以下示例顯示了在一個?StackPanel?內(nèi)組合兩個對等 UI 元素的最簡單的 XAML。

<StackPanel><TextBlock>Hello</TextBlock><TextBlock>World</TextBlock> </StackPanel>

XAML 集合語法的機制

乍看起來,XAML 似乎支持一“組”只讀的集合屬性。事實上,XAML 在這里支持的是向一個現(xiàn)有集合添加項。實現(xiàn) XAML 支持的 XAML 語言和 XAML 處理器依賴于支持集合類型中的一種約定來支持此語法。 通常會有一個支持屬性,例如索引器或引用特定集合項的?Items?屬性。一般而言,該屬性在 XAML 語法中不是顯式的。對于集合,XAML 分析的基礎(chǔ)機制不是一個屬性,而是一個方法:具體來講在大部分情形下是?Add?方法。當 XAML 處理器在 XAML 集合語法中遇到一個或多個對象元素時,首先根據(jù)元素創(chuàng)建每個對象,然后調(diào)用集合的?Add?方法添加每個新對象,從而包含集合。

當一個 XAML 分析器向集合添加項時,Add?方法的邏輯會確定給定 XAML 元素是否為集合對象的一個允許的子項。許多集合類型都由支持實現(xiàn)設(shè)置了嚴格的類型,這意味著?Add?的輸入?yún)?shù)希望傳遞的內(nèi)容其類型必須與?Add?參數(shù)類型匹配。

對于集合屬性,在嘗試將集合明確指定為對象元素時一定要謹慎。XAML 分析程序在遇到對象元素時將創(chuàng)建一個新對象。如果要嘗試使用的集合屬性是只讀的,這可能會引發(fā) XAML 分析異常。只需使用隱式集合語法就會消除該異常。

何時使用屬性或?qū)傩栽卣Z法

任何支持在 XAML 中設(shè)置的屬性都將支持使用屬性或?qū)傩栽卣Z法來直接設(shè)置值,但可能不會支持交替使用兩種語法。一些屬性支持一種語法,而另一些屬性支持其他語法選項,例如 XAML 內(nèi)容屬性。一個屬性支持的 XAML 語法類型在依賴于該屬性用作其屬性類型的對象類型。如果屬性類型為原語類型,例如雙精度(浮點或小數(shù))、整型、布爾或字符串,該屬性將始終支持屬性語法。

如果用于設(shè)置屬性的對象類型可通過處理字符串來創(chuàng)建,你也可以使用屬性語法來設(shè)置該屬性。對于原語,始終會這樣,因為類型轉(zhuǎn)換內(nèi)置到分析程序中。但是,其他一些對象類型也可使用一個指定為屬性值(而不是屬性元素內(nèi)的對象元素)的字符串來創(chuàng)建。為了實現(xiàn)此目標,必須有一種基礎(chǔ)類型轉(zhuǎn)換(受該特定屬性支持,或受使用該屬性類型的所有值廣泛支持)。屬性的字符串值用于設(shè)置對初始化新對象值非常重要的屬性。一種特定的類型轉(zhuǎn)換器也可以創(chuàng)建一種常用屬性類型的不同子類,具體取決于它如何獨特地處理字符串中的信息。對于支持此行為的對象類型,我們將在參考文檔的語法一節(jié)中列出一種特殊的語法。 例如,Brush?的 XAML 語法顯示如何使用屬性語法來為?Brush?類型的任何屬性(在 Windows 運行時 XAML 中,存在許多?Brush?屬性)創(chuàng)建新?SolidColorBrush?值。

XAML 分析邏輯和規(guī)則

有時,最好按照與 XAML 分析程序讀取 XAML 相類似的方式來讀取 XAML,也就是說將 XAML 作為一組按線性順序遇到的字符串令牌。XAML 分析程序必須按照一組規(guī)則來解釋這些令牌,這些規(guī)則屬于對 XAML 工作原理的定義。

設(shè)置特性值是在標記語言中設(shè)置屬性值的典型方法,例如在 XML 或 HTML 中。在下面的語法中,objectName?是你想要實例化的對象,propertyName?是你希望在該對象上設(shè)置的屬性名稱,propertyValue?是要設(shè)置的值。

<objectName propertyName="propertyValue" .../>-or-<objectName propertyName="propertyValue">...<!--element children --></objectName>

每種語法都支持你聲明一個對象并在該對象上設(shè)置一個屬性。第一個示例是標記中的一個元素,但實際上 XAML 處理器分析此標記的過程包含多個步驟。

首先,對象元素的存在表明必須實例化一個新?objectName?對象。只有存在這樣一個實例,才能在它之上設(shè)置實例屬性propertyName。

?

另一個 XAML 規(guī)則是元素的屬性必須能夠按照任何順序進行設(shè)置。例如,<Rectangle Height="50" Width="100" />和?<Rectangle Width="100" Height="50" />?之間沒有區(qū)別。使用哪種順序只是樣式問題。

注意??如果你使用的設(shè)計表面不是 XML 編輯器,XAML 設(shè)計人員通常會提升排序約定,但是你可以在后來任意編輯該 XAML,以便對屬性重新排序或者引入新屬性。

附加屬性

XAML通過添加一個名為附加屬性的語法元素對 XML 進行了擴展。類似于屬性元素語法,附加屬性語法包含一個點,這個點對 XAML 分析具有特殊的含義。具體來講,這個點將附加屬性的所有者提供程序與屬性名稱分開。

在 XAML 中,使用語法?AttachedPropertyProvider?設(shè)置附加屬性。PropertyName?以下是一個在 XAML 中設(shè)置附加屬性?Canvas.Left?的示例:

<Canvas><Button Canvas.Left="50">Hello</Button> </Canvas>

?

你可以在某些元素上設(shè)置附加屬性,因為這些元素的支持類型中沒有命名為該名稱的屬性,這樣所設(shè)置附加屬性的功能在一定程度上類似于全局屬性,或由其他某個 XML 命名空間定義的屬性(例如?xml:space?屬性)。

在 Windows 運行時 XAML 中,你將看到支持以下方案的附加屬性:

  • 子元素可以將其在布局中的行為方式(Canvas,、Grid?和?VariableSizedWrapGrid)通知給父容器面板。
  • 控件用法會影響來自控件模板的重要控件部分(ScrollViewer?和?VirtualizingStackPanel)的行為。
  • 使用相關(guān)類中提供的服務(wù),其中使用該服務(wù)的服務(wù)和類不共享繼承功能:TypographyVisualStateManagerAutomationProperties?和?ToolTipService
  • 動畫目標:Storyboard

有關(guān)詳細信息,請參閱附加屬性概述。

文字“{”值

因為左括號 { 是標記擴展序列的開始,所以你必須使用一個轉(zhuǎn)義序列來指定一個以 "{" 開始的文字字符串值。該轉(zhuǎn)義序列是 "{}"。例如,要指定一個是單個左括號的字符串值,可以將該屬性值指定為 "{}{"。你也可以使用引號(例如,一個由""?分隔的屬性值中的?')來以字符串形式提供 "{" 值。

注意?? 如果在用引號引起的屬性內(nèi),使用 "\}" 也可以。

枚舉值

Windows 運行時 API 中的許多屬性都使用枚舉作為值。如果成員是讀寫屬性,則可以通過提供一個特性值來設(shè)置這樣的屬性。可以通過使用常量名稱的非限定名稱來確定哪個枚舉值要用作該屬性的值。例如,下面介紹如何設(shè)置 XAML 形式的?UIElement.Visibility:<Button Visibility="Visible"/>。下面作為字符串的 "Visible" 可以直接映射到?Visibility?枚舉的命名常量?Visible

  • 不要使用限定形式,因為它不起作用。例如,下面的 XAML 無效:<Button Visibility="Visibility.Visible"/>
  • 請勿使用常量的值。換句話說,請勿依賴顯式或隱式依賴枚舉定義方式的枚舉的整數(shù)值。盡管看似可行,但無論采用 XAML 形式還是代碼形式,這都是不合適的做法,因為你依賴的可能是過渡實現(xiàn)的詳細信息。例如,請勿執(zhí)行如下操作:<Button Visibility="1"/>。

注意??在使用 XAML 和使用枚舉的 API 參考主題中,在“語法”的“屬性值”部分,單擊枚舉類型的鏈接。在指向枚舉頁面的此鏈接中,你可以發(fā)現(xiàn)該枚舉的命名常量。

枚舉可以具有與標志相同的作用,即,它們可以被歸類于?FlagsAttribute。如果你需要將具有標志作用的枚舉的值組合指定為一個 XAML 屬性值,請使用每個枚舉常量的名稱,在每個名稱之間加一個逗號 (,),不要有任何多余的空格字符。 具有標志作用的屬性在 Windows 運行時 XAML 詞匯中并不常見,但?ManipulationModes?示例表明了支持以 XAML 的形式設(shè)置具有標志作用的枚舉值。

XAML 中的接口

只有在極少情況下你會看到其中屬性類型為接口的 XAML 語法。在 XAML 類型系統(tǒng)中,可以接受實現(xiàn)該接口的類型,在解析時將其作為一個值。肯定存在一個可用作值的此類類型的一個創(chuàng)建實例。在?ButtonBase?的?Command?和CommandParameter?屬性的 XAML 語法中,你將看到用作類型的一個接口。這些屬性支持 Model-View-ViewModel (MVVM) 設(shè)計模式,其中?ICommand?接口是針對視圖和模型交互方式的合約。

Windows 運行時參考中的 XAML 占位符約定

參考主題中有針對可以使用 XAML 的 Windows 運行時 API 的“語法”部分,如果你閱讀過其中某個部分,就可能會看到語法中包含很多占位符。XAML 語法不同于 C#、Microsoft Visual Basic 或 Visual?C++ 組件擴展 (C++/CX) 語法,因為 XAML 語法是一種用法語法。它會提示你在自己的 XAML 文件中的最終用法,但不會過度規(guī)定可以使用的值。因此,通常用法描述混合了文本和占位符的語法類型,并定義“XAML 值”部分中的某些占位符。

當你在某個屬性的 XAML 語法中看到類型名稱/元素名稱時,顯示的名稱為最初定義該屬性的類型的名稱。但 Windows 運行時 XAML 支持基于?DependencyObject?的類的類繼承模型。因此,通常你可以使用以下類中的屬性:該類從字面上看不屬于定義類,但派生自首先定義該屬性/特性的類。例如,你可以將?Visibility?設(shè)置為使用深度繼承的任何UIElement?派生類上的屬性。例如:<Button Visibility="Visible" />。因此,對于任意 XAML 用法語法中顯示的元素名稱,都不要過于拘泥于字面意思;該語法對于表示該類的元素以及表示派生類的元素也可能同樣適用。在類型很少或不能顯示為采用真實用法的定義元素時,該類型名稱在語法中刻意小寫。例如,你看到的?UIElement.Visibility?的語法為:

<uiElement Visibility="Visible"/> -or- <uiElement Visibility="Collapsed"/>

?

許多 XAML 語法部分的“用法”中均包含有占位符,隨后將在“語法”部分下的“XAML 值”部分對這些占位符進行定義。

XAML 用法部分還使用各種通用性占位符。有些情況下,這些占位符可能并不需要在“XAML 值”中重新定義,因為你可以猜到或最終會了解到這些占位符代表的含義。我們認為大部分讀者不愿意在“XAML 值”中一再看到這些占位符,因而我們不定義這些占位符。出于參考目的,下面列出了這些占位符中的部分占位符以及這些占位符的常規(guī)含義:

  • object:從理論上講是任意對象值,但實際上通常被限制為特定類型的對象(例如“字符串或?qū)ο蟆边x擇),并且應(yīng)查看參考頁面上的“備注”部分以獲取更多信息。
  • object?property:object?property?組合用于以下情況:要顯示的語法所適用于的類型可用作許多屬性的屬性值。例如,為?Brush?顯示的“Xaml 屬性用法”包括:<objectproperty="predefinedColorName"/>
  • eventhandler:這將顯示為為事件屬性顯示的每個 XAML 語法的屬性值。此處所提供的內(nèi)容為事件處理程序函數(shù)的函數(shù)名。該函數(shù)必須在 XAML 頁面的代碼隱藏中定義。在編程級別上,該函數(shù)必須與你處理的事件的委派簽名匹配,或者你的應(yīng)用代碼未編譯。但這實際是出于編程方面的考慮,而不是 XAML 方面的考慮,因此我們不嘗試在 XAML 語法中暗示有關(guān)委派類型的任何內(nèi)容。如果你希望了解你應(yīng)實現(xiàn)事件的哪個委派,請在標記為“委派”的表行中參閱該事件參考主題的“事件信息”部分。
  • enumMemberName:顯示在所有枚舉的屬性語法中。存在使用枚舉值的屬性的類似占位符,但它通常為占位符附加該枚舉的名稱提示作為前綴。例如,為?FrameworkElement.FlowDirection?顯示的語法為 <frameworkElementFlowDirection="flowDirectionMemberName"/>。如果你位于某個屬性參考頁面上,請在“類型:”字樣旁邊的“屬性值”部分單擊枚舉類型的鏈接。對于使用該枚舉的屬性的屬性值,你可以使用“成員”列表的“成員”列中列出的任意字符串。
  • double、int、string、bool:存在 XAML 語言已知的基元類型。 如果你使用 C# 或 Visual Basic 進行編程,則這些類型將映射到 Microsoft .NET 等價類型,例如?DoubleInt32String?和?Boolean,并且在使用 .NET 代碼隱藏中的 XAML 定義的值時你可以使用這些 .NET 類型上的任意成員。如果你使用 C++/CX 進行編程,則可以使用 C++ 基元類型,但也可以考慮使用?Platform?命名空間定義的類型的等價類型,例如?Platform::String。有時,對于特定屬性存在其他值限制。但你通常會在“屬性值”部分或“備注”部分(而非 XAML 部分)看到這些限制,因為所有此類限制都既適用于代碼用法也適用于 XAML 用法。

有關(guān)樣式的提示、技巧和注釋

  • 主?XAML 概述中介紹了全體的標記擴展。但是,對本主題中提供的指導(dǎo)影響最大的標記擴展是?StaticResource?標記擴展(以及相關(guān)?ThemeResource)。StaticResource 標記擴展的作用是允許將你的 XAML 計入來自 XAMLResourceDictionary?的可重用資源中。你幾乎始終在 ResourceDictionary 中定義控件模板和相關(guān)樣式。你通常還在 ResourceDictionary 中定義控件模板定義的較小部件或特定于應(yīng)用的樣式,例如,對于由應(yīng)用中的不同 UI 部件多次使用的某種顏色,定義?SolidColorBrush。 通過使用 StaticResource,任何之前需要使用屬性元素來設(shè)置的屬性現(xiàn)在可以使用屬性語法進行設(shè)置。但是,使 XAML 可重用所帶來的好處絕不僅僅是簡化了頁面級語法。有關(guān)詳細信息,請參閱 ResourceDictionary 和 XAML 資源參考。
  • 對于 XAML 示例中如何應(yīng)用空格和換行符,你將看到幾種不同的約定。具體而言,對于如何拆分設(shè)置了許多不同屬性的對象元素存在不同的約定。這只是樣式問題。Visual Studio XML 編輯器會在你編輯 XAML 時應(yīng)用默認的樣式規(guī)則,但是你可以在設(shè)置中更改默認樣式。在少數(shù)情況下,XAML 文件中的空格被視為非常重要;有關(guān)詳細信息,請參閱XAML 和空格。

總結(jié)

以上是生活随笔為你收集整理的基本 XAML 语法指南的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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