我們會說明 XAML 語法規則,以及描述 XAML 語法可用限制或選擇的術語。 如果您不熟悉使用 XAML 語言,想要複習術語或部分語法,或對 XAML 語言的運作方式感到好奇,並想要更多背景和內容,您會發現本主題很有用。
XAML 是 XML
可延伸應用程式標記語言 (XAML) 具有以 XML 為基礎的基本語法,根據定義,有效的 XAML 必須是有效的 XML。 但 XAML 也有自己的語法概念來擴充 XML。 指定的 XML 實體在純 XML 中可能有效,但該語法可能具有與 XAML 不同且更完整的意義。 本主題說明這些 XAML 語法概念。
XAML 詞彙
XAML 與大部分 XML 使用方式不同的其中一個區域是,XAML 通常不會使用結構描述強制執行,例如 XSD 檔案。 這是因為 XAML 旨在可擴展,這就是縮寫 XAML 中的“X”的含義。 剖析 XAML 之後,您在 XAML 中參考的元素和屬性預期會存在於某些支援程式碼表示法中,無論是在 Windows 執行階段所定義的核心類型中,還是在擴充或以 Windows 執行階段為基礎的類型中。 SDK 檔有時會參考已內建於 Windows 執行階段的類型,且可在 XAML 中用作 Windows 執行階段的 XAML 詞彙 。 Microsoft Visual Studio 可協助您產生在此 XAML 詞彙中有效的標記。 Visual Studio 也可以包含 XAML 使用的自訂類型,只要在專案中正確參考這些類型的來源即可。 如需 XAML 和自訂類型的詳細資訊,請參閱 XAML 命名空間和命名空間對應。
宣告物件
程式設計師通常從物件和成員的角度進行思考,而標記語言則被概念化為元素和屬性。 在最基本的意義上,您在 XAML 標記中宣告的元素會成為支援執行階段物件表示法中的物件。 若要建立應用程式的執行階段物件,請在 XAML 標記中宣告 XAML 元素。 當 Windows 執行階段載入 XAML 時,會建立物件。
XAML 檔案總是只有一個元素作為根,它會宣告一個物件,此物件將成為一些程式設計結構的概念根,例如頁面,或是應用程式整個執行階段定義中的物件圖。
在XAML語法方面,在XAML中宣告物件有三種方式:
- 直接,使用物件元素語法: 這會使用開始和結束標籤將物件實例化為 XML 表單元素。 您可以使用此語法來宣告根物件,或建立設定屬性值的巢狀物件。
- 間接地,使用屬性語法: 這會使用內嵌字串值,其中包含如何建立物件的指示。 XAML 剖析器會使用此字串,將屬性的值設定為新建立的參考值。 對它的支援僅限於某些常見的物件和屬性。
- 使用標記延伸模組。
這並不表示您一律可以選擇在 XAML 詞彙中建立物件的任何語法。 某些物件只能使用物件元素語法來建立。 有些物件只能透過在屬性中最初設定來建立。 事實上,可以使用物件元素或屬性語法建立的物件在 XAML 詞彙中相對罕見。 即使兩種語法形式都是可能的,其中一種語法在風格上也會更常見。 您也可以在 XAML 中使用一些技術來參考現有的物件,而不是建立新的值。 現有的物件可能會定義在 XAML 的其他區域中,或可能透過平臺及其應用程式或程式設計模型的某些行為隱含地存在。
使用物件元素語法宣告物件
若要使用物件元素語法宣告物件,請撰寫如下標籤: <objectName> </objectName>,其中 objectName 是您要實例化之物件的類型名稱。 以下是宣告 Canvas 物件的物件元素用法:
<Canvas>
</Canvas>
如果物件不包含其他物件,您可以使用單一的自閉合標籤來宣告物件元素,而不用成對的開啟/關閉標籤:<Canvas />
容器
許多用作 UI 元素的物件 (例如 Canvas) 可以包含其他物件。 這些有時稱為容器。 下列範例顯示包含一個元素 Rectangle 的 Canvas 容器。
<Canvas>
<Rectangle />
</Canvas>
使用屬性語法宣告物件
由於此行為與屬性設定相關聯,因此我們將在接下來的章節中進一步討論這一點。
初始化文字
對於某些物件,您可以使用內部文字來宣告新值,這些文字會用作建構的初始化值。 在 XAML 中,此技術和語法稱為 初始化文字。 從概念上講,初始化文字類似於呼叫具有參數的建構函式。 初始化文字對於設定特定結構的起始值很有用。
如果您想要具有 x:Key 的結構值,您通常會使用物件元素語法搭配初始化文字,讓它可以存在於 ResourceDictionary 中。 如果您在多個目標屬性之間共用該結構值,則可以執行此動作。 對於某些結構,您無法使用屬性語法來設定結構的值:初始化文字是產生有用且可共用的 CornerRadius、 Thickness、 GridLength 或 Color 資源的唯一方法。
此縮寫範例使用初始化文字來指定厚度的值,在此情況下,指定將「左」和「右」設定為 20,並將「頂部」和「底部」設定為 10 的值。 此範例顯示建立為索引鍵資源的 Thickness ,然後顯示該資源的參考。 如需 Thickness 初始化文字的詳細資訊,請參閱 Thickness。
<UserControl ...>
<UserControl.Resources>
<Thickness x:Key="TwentyTenThickness">20,10</Thickness>
....
</UserControl.Resources>
...
<Grid Margin="{StaticResource TwentyTenThickness}">
...
</Grid>
</UserControl ...>
備註
某些結構無法宣告為物件元素。 不支援初始化文字,而且無法作為資源使用。 您必須使用屬性語法,才能將屬性設定為 XAML 中的這些值。 這些類型包括: Duration、 RepeatBehavior、 Point、 Rect 和 Size。
設定屬性
您可以在使用物件元素語法宣告的物件上設定內容。 在 XAML 中設定屬性的方式有多種:
- 透過使用屬性語法。
- 透過使用屬性元素語法。
- 使用元素語法,其中內容 (內部文字或子元素) 會設定物件的 XAML 內容屬性。
- 藉由使用集合語法 (通常是隱含的集合語法) 。
如同物件宣告,此清單並不表示可以使用每個技術設定任何屬性。 某些屬性僅支援其中一種技術。 某些屬性支援多個表單;例如,有些屬性可以使用屬性元素語法或屬性語法。 可能的情況取決於屬性和屬性使用的物件類型。 在 Windows 執行階段 API 參考中,您會在 [ 語法 ] 區段中看到您可以使用的 XAML 使用方式。 有時有另一種用法可以工作,但會更冗長。 這些詳細的使用方式不一定會顯示,因為我們嘗試向您展示在 XAML 中使用該屬性的最佳做法或實際案例。 在參考頁面的 XAML 使用方式 區段中,提供可在 XAML 中設定的屬性之 XAML 語法指引。
物件上的某些屬性無法以任何方式在 XAML 中設定,而且只能使用程式碼來設定。 通常這些屬性更適合在程式碼後置中使用,而不是在 XAML 中使用。
無法在 XAML 中設定唯讀屬性。 即使在程式碼中,擁有類型也必須支援其他方式來設定它,例如建構函式多載、協助程式方法或計算屬性支援。 計算屬性依賴於其他可設定屬性的值,有時還依賴於具有內建處理的事件;這些功能可在相依性屬性系統中使用。 如需相依性屬性如何用於計算屬性支援的詳細資訊,請參閱 相依性屬性概觀。
XAML 中的集合語法會讓您看起來像是設定唯讀屬性,但實際上並非如此。 請參閱本主題稍後的「集合語法」。
使用屬性語法設定屬性
設定屬性值是您在標記語言中設定屬性值的一般方法,例如在 XML 或 HTML 中。 設定 XAML 屬性類似於您在 XML 中設定屬性值的方式。 屬性名稱會在元素名稱後面的標籤內的任何點指定,與元素名稱至少以一個空格分隔。 屬性名稱後面接著等號。 屬性值包含在一對引號內。 引號可以是雙引號或單引號,只要它們符合並括住值即可。 屬性值本身必須可表示為字串。 字串通常包含數字,但對 XAML 來說,所有屬性值都是字串值,直到 XAML 剖析器參與並執行一些基本值轉換為止。
此範例會使用四個屬性的屬性語法來設定 Rectangle 物件的 Name、Width、Height 和 Fill 屬性。
<Rectangle Name="rectangle1" Width="100" Height="100" Fill="Blue" />
使用屬性元素語法來設置屬性
物件的許多屬性都可以使用屬性元素語法來設定。 屬性元素如下所示: <物件.屬性>。
若要使用屬性元素語法,您可以為要設定的屬性建立 XAML 屬性元素。 在標準 XML 中,此元素只會被視為名稱中包含點的元素。 不過,在 XAML 中,元素名稱中的點會將元素識別為屬性元素, 而屬性 預期會是支援物件模型實作中 物件 的成員。 若要使用屬性元素語法,必須能夠指定物件元素,才能「填入」屬性元素標籤。 屬性元素一律會有一些內容(單一元素、多個元素或內部文字);擁有自動關閉屬性元素是沒有意義的。
在下列文法中, property 是您要設定的屬性名稱, 而 propertyValueAsObjectElement 是單一物件元素,預期會滿足屬性的值類型需求。
<
物件>
<
物體.財產>
propertyValueAsObjectElement
</
物體.財產>
</
物件>
下列範例使用屬性元素語法,以 SolidColorBrush 物件元素設定 矩形的 填充。 (在 SolidColorBrush 中, Color 會設定為屬性。此 XAML 的剖解析結果與先前的 XAML 範例相同,該範例會使用屬性語法設定 Fill 。
<Rectangle
Name="rectangle1"
Width="100"
Height="100">
<Rectangle.Fill>
<SolidColorBrush Color="Blue"/>
</Rectangle.Fill>
</Rectangle>
XAML 詞彙和物件導向程式設計
屬性和事件作為 Windows 執行階段 XAML 類型的 XAML 成員,通常會繼承自基底類型。 請考慮以下範例: <Button Background="Blue" .../>。
Background 屬性不是 Button 類別上立即宣告的屬性。 相反地, Background 會繼承自基底 Control 類別。 事實上,如果您查看 Button 的參考主題,您會看到成員清單至少包含一個來自連續基類鏈結的繼承成員: ButtonBase、 Control、 FrameworkElement、 UIElement、 DependencyObject。 在 [屬性] 清單中,所有讀寫屬性和集合屬性都會以 XAML 詞彙意義繼承。 事件 (例如各種 UIElement 事件) 也會繼承。
如果您使用用于 XAML 指導的 Windows 執行階段參考,有時在語法或範例程式碼中顯示的元素名稱是最初定義該屬性的類型名稱,因為這個參考主題是由所有可能從基底類別繼承它的類型所共用。 如果您在 XML 編輯器中使用 Visual Studio 的 IntelliSense for XAML,當您開始使用類別實例的物件元素後,IntelliSense 及其下拉式清單能夠有效整合繼承關係,並準確提供可供設定的屬性清單。
XAML 內容屬性
某些類型會定義其中一個屬性,讓屬性啟用 XAML 內容語法。 針對類型的 XAML 內容屬性,您可以在 XAML 中指定該屬性時省略該屬性的屬性元素。 或者,您可以直接在擁有類型的物件元素標籤中提供內文,將屬性設定為該內文值。 XAML 內容屬性支援該屬性的直接標記語法,並藉由減少巢狀讓 XAML 更易讀。
如果 XAML 內容語法可用,則該語法會顯示在 Windows 執行階段參考檔中該屬性的 語法 的「XAML」區段中。 例如,Border 的 [子屬性] 頁面會顯示 XAML 內容語法,而不是屬性元素語法,以設定 Border 的單一物件 Border.Child 值,如下所示:
<Border>
<Button .../>
</Border>
如果宣告為 XAML 內容屬性的屬性是 Object 類型,或類型是 String,則 XAML 內容語法支援 XML 文件模型中基本上是內部文字的內容:開始和結束物件標籤之間的字串。 例如,TextBlock 的 Text 屬性頁面會顯示 XAML 內容語法,其內部文字值可設定 Text,但字串 “Text” 永遠不會出現在標記中。 以下是範例用法:
<TextBlock>Hello!</TextBlock>
如果類別存在 XAML 內容屬性,則會在類別的參考主題中的「屬性」區段中指出。 尋找 ContentPropertyAttribute 的值。 此屬性使用具名欄位 “Name”。 「Name」 的值是該類別的屬性名稱,也就是 XAML 內容屬性。 例如,在 「邊框 參考」頁面上,您會看到以下內容:ContentProperty(“Name=Child”)。
我們應該提到的一個重要的 XAML 語法規則是,您無法混合 XAML 內容屬性和您在元素上設定的其他屬性元素。 XAML 內容屬性必須完全設定在任何屬性元素之前,或完全設定在任何屬性元素之後。 例如,這是無效的 XAML:
<StackPanel>
<Button>This example</Button>
<StackPanel.Resources>
<SolidColorBrush x:Key="BlueBrush" Color="Blue"/>
</StackPanel.Resources>
<Button>... is illegal XAML</Button>
</StackPanel>
集合語法
到目前為止顯示的所有語法都是將屬性設定為單一物件。 但許多 UI 案例要求指定的父元素可以有多個子元素。 例如,輸入表單的 UI 需要數個文字方塊元素、一些標籤,也許還有一個「提交」按鈕。 不過,如果您要使用程式設計對象模型來訪問這些元素,它們通常會是單一集合屬性中的項目,而不是每個項目都是不同屬性的值。 XAML 支援多個子元素,並且通過將使用集合類型的屬性視為隱含屬性,實現對典型備援集合模型的支援,還對集合類型的任何子元素進行特殊處理。
許多集合屬性也被識別為該類別的 XAML 內容屬性。 隱含集合處理和 XAML 內容語法的組合經常出現在用於控制項組合的類型中,例如面板、檢視或專案控制項。 例如,下列範例顯示最簡單的 XAML,用於在 StackPanel 內組合兩個對等 UI 元素。
<StackPanel>
<TextBlock>Hello</TextBlock>
<TextBlock>World</TextBlock>
</StackPanel>
XAML 集合語法的機制
最初,XAML 可能看起來像是在設定唯讀集合屬性。 實際上,XAML 在這裡啟用的是將項目新增至現有的集合。 實作 XAML 支援的 XAML 語言和 XAML 處理器依賴支援集合類型的慣例來啟用此語法。 一般而言,有一個後援屬性,例如索引子或 Items 屬性,可參考集合的特定項目。 一般而言,該屬性在 XAML 語法中並不明確。 針對集合,XAML 剖析的基礎機制不是屬性,而是方法:具體來說,在大部分情況下是 Add 方法。 當 XAML 處理器在 XAML 集合語法中遇到一或多個物件元素時,會先從元素建立每個這類物件,然後呼叫集合的 Add 方法,將每個新物件新增至包含的集合。
當 XAML 剖析器將專案新增至集合時,會由 Add 方法的邏輯來判斷指定的 XAML 元素是否為集合物件的允許專案子系。 許多集合類型是由支援實作強式類型化,這表示 Add 的輸入參數預期傳遞的任何內容都必須是與 Add 參數類型的類型相符。
針對集合屬性,當您嘗試明確將集合指定為物件元素時,請小心。 XAML 剖析器會在遇到物件元素時建立新的物件。 如果您嘗試使用的集合屬性是唯讀的,這可能會拋出 XAML 剖析例外狀況。 只需使用隱含集合語法,您就不會看到該異常。
何時使用屬性或屬性元素語法
所有支援在 XAML 中設定的屬性都會支援透過屬性標籤或屬性元素語法來直接設定值,但可能不支援任一語法的互換使用。 某些屬性支援任一語法,而某些屬性支援其他語法選項,例如 XAML 內容屬性。 屬性支援的 XAML 語法類型取決於屬性用作其屬性類型的物件類型。 如果屬性類型是基本類型,例如 double (浮點或十進位)、整數、布林值或字串,則屬性一律支援屬性語法。
如果您用來設定該屬性的物件類型可以透過處理字串來建立,您也可以使用屬性語法來設定該屬性。 對於基本類型,情況總是如此,類型轉換內建於剖析器中。 不過,某些其他物件類型也可以使用指定為屬性值的字串來建立,而不是使用屬性元素內的物件元素來建立。 若要運作,必須有基礎類型轉換,由該特定屬性支援,或一般支援使用該屬性類型的所有值。 屬性的字串值可用來設定對起始設定新物件值很重要的內容。 特定類型轉換器也可能建立通用屬性類型的不同子類別,具體取決於它如何唯一地處理字串中的資訊。 支援此行為的物件類型將具有參考文件語法區段中列出的特殊文法。 例如,Brush 的 XAML 語法顯示如何使用屬性語法為 Brush 類型的任何屬性建立新的 SolidColorBrush 值 (Windows 執行階段 XAML 中有許多 Brush 屬性)。
XAML 剖析邏輯和規則
有時,以 XAML 剖析器需要的方式來讀取 XAML,可以帶來資訊:作為線性順序中一組遇到的字串詞元。 XAML 剖析器必須根據一組規則來解析這些 XAML 的標記,而這些規則是 XAML 運作方式定義的一部分。
設定屬性值是您在標記語言中設定屬性值的一般方法,例如在 XML 或 HTML 中。 在下列語法中, objectName 是您要具現化的物件, propertyName 是您要在該物件上設定的內容名稱,而 propertyValue 是要設定的值。
<objectName propertyName="propertyValue" .../>
-or-
<objectName propertyName="propertyValue">
...<!--element children -->
</objectName>
任一語法都可讓您宣告物件,並在該物件上設定屬性。 雖然第一個範例是標記中的單一元素,但這裡實際上有關於 XAML 處理器如何剖析此標記的離散步驟。
首先,物件元素的存在表示必須實例化新的 objectName 物件。 只有在這類實例存在之後,才能在其上設定實例屬性 propertyName 。
XAML 的另一個規則是元素的屬性必須能夠以任何順序設定。 例如,<Rectangle Height="50" Width="100" />和<Rectangle Width="100" Height="50" />之間沒有區別。 您使用哪種順序是風格問題。
備註
如果您使用非 XML 編輯器的設計畫面,XAML 設計工具通常會強調排序慣例,但您可以稍後自由編輯該 XAML,以重新排序屬性或新增屬性。
附加屬性
XAML 會藉由新增稱為 附加屬性的語法元素來擴充 XML。 與屬性元素語法類似,附加屬性語法包含點,而點對 XAML 剖析具有特殊意義。 具體而言,點會區隔附加屬性的提供者和屬性名稱。
在 XAML 中,您可以使用語法 AttachedPropertyProvider 來設定附加屬性。屬性名稱 以下是如何在 XAML 中設定附加屬性 Canvas.Left 的範例:
<Canvas>
<Button Canvas.Left="50">Hello</Button>
</Canvas>
您可以在支援類型中沒有該名稱屬性的元素上設定附加屬性,這樣它們的功能有點像全域屬性,或由不同 XML 命名空間定義的屬性,例如 xml:space 屬性。
在 Windows 執行階段 XAML 中,您會看到支援下列案例的附加屬性:
- 子元素可以通知父容器面板它們在佈局中的行為方式: Canvas、 Grid、 VariableSizedWrapGrid。
- 控制項使用方式可能會影響來自控制項範本之重要控制項組件的行為: ScrollViewer、 VirtualizingStackPanel。
- 使用相關類別中可用的服務,其中服務和使用它的類別不會共用繼承: Typography、 VisualStateManager、 AutomationProperties、 ToolTipService。
- 動畫目標: Storyboard。
如需詳細資訊,請參閱 附加屬性概觀。
字面值 “{” 值
因為左大括號符號 { 是標記延伸序列的開頭,所以你可以使用跳脫序列來指定以 '{' 開頭的常值字串。 轉義序列為“{}”。 例如,若要指定單一左大括弧的字串值,請將屬性值指定為 “{}{”。 您也可以使用替代引號 (例如,以 “” 分隔的屬性值內的 ') 來提供 “{” 值作為字串。
備註
如果 “\}” 位於引號屬性內,它也有效。
列舉值
Windows 執行階段 API 中的許多屬性都會使用列舉作為值。 如果成員是可讀可寫的屬性,您可以藉由提供屬性值來設定這種屬性。 您可以使用常數名稱的未限定名稱來識別要用作屬性值的列舉值。 例如,以下是在 XAML 中設定 UIElement.Visibility 的方法: <Button Visibility="Visible"/>。 在這裡,作為字串的「Visible」會直接對應至 Visibility 列舉的具名常數 Visible。
- 不要使用合格的表格,它不起作用。 例如,這是無效的 XAML:
<Button Visibility="Visibility.Visible"/>。 - 請勿使用常數的值。 換句話說,不要依賴列舉中的整數型值,這取決於列舉是如何定義的,無論是明確地還是隱含地。 雖然它看起來可能有效,但在 XAML 或程式碼中都是一種不好的做法,因為您依賴可能是暫時性的實作細節。 例如,不要這樣做:
<Button Visibility="1"/>。
備註
在使用 XAML 和列舉之 API 的參考主題中,按一下 [語法] 的 [屬性值] 區段中列舉類型的連結。 這會連結至列舉頁面,您可以在其中探索該列舉的具名常數。
列舉可以是旗標,這表示它們會以 FlagsAttribute 來屬性。 如果您需要將旗標列舉的值組合指定為 XAML 屬性值,請使用每個列舉常數的名稱,並在每個名稱之間加上逗號 (,),而且沒有中間空格字元。 Flagwise 屬性在 Windows 執行階段 XAML 詞彙中並不常見,但 ManipulationModes 是支援在 XAML 中設定 Flagwise 列舉值的範例。
XAML 中的介面
在極少數情況下,您會看到 XAML 語法,其中屬性的類型是介面。 在 XAML 類型系統中,實作該介面的類型在剖析時可接受為值。 必須有已建立的此類類型實例可用,才能作為值。 您會看到在 ButtonBase 的 Command 和 CommandParameter 屬性的 XAML 語法中,使用介面做為類型。 這些屬性支援模型-檢視-檢視模型(MVVM)設計模式,其中 ICommand 介面是檢視和模型互動方式的契約。
Windows 執行階段參考中的 XAML 預留位置規範
如果您已檢查可使用 XAML 之 Windows 執行階段 API 參考主題的任何 [ 語法 ] 區段,您可能已經看到語法包含相當多的預留位置。 XAML 語法與 C#、Microsoft Visual Basic 或 Visual C++ 元件延伸模組 (C++/CX) 語法不同,因為 XAML 語法是使用語法。 它提示了您在自己的 XAML 檔案中的最終使用方式,但不會過度限制您使用的值。 因此,通常使用方式會描述一種混合常值和預留位置的文法類型,並在 [XAML 值] 區段中定義一些預留位置。
當您在屬性的 XAML 語法中看到類型名稱/元素名稱時,顯示的名稱是針對最初定義屬性的類型。 但 Windows 執行階段 XAML 支援 DependencyObject 型類別的類別繼承模型。 因此,您通常可以在類別上使用屬性,該類別實際上不是直接定義屬性的類別,而是從最初定義屬性的類別衍生而來。 例如,您可以使用深度繼承,將 Visibility 設定為任何 UIElement 衍生類別的屬性。 例如: <Button Visibility="Visible" /> 。 因此,請勿太字面地理解任何 XAML 使用語法中顯示的元素名稱;語法可能適用於代表該類別的元素,以及代表衍生類別的元素。 如果顯示為定義元素的類型很少或不可能出現在實際使用中,則該類型名稱在語法中會刻意小寫。 例如,您看到的 UIElement.Visibility 語法是:
<uiElement Visibility="Visible"/>
-or-
<uiElement Visibility="Collapsed"/>
許多 XAML 語法區段都會在「使用方式」中包含預留位置,然後在 [語法] 區段正下方的 [XAML 值] 區段中定義。
XAML 使用方式區段也會使用各種一般化預留位置。 這些預留位置不會每次都在 XAML 值中重新定義,因為您會猜測或最終瞭解它們代表什麼。 我們認為大部分的讀者會厭倦在 XAML 值 中一次又一次地看到它們,因此我們將它們排除在定義之外。 作為參考,以下是其中一些佔位符的列表及其在一般意義上的含義:
- object:理論上任何物件值,但實際上通常僅限於特定類型的物件,例如字串或物件選擇,您應該查看參考頁面上的備註以取得詳細資訊。
- 物件屬性:物件屬性組合用於顯示的語法是類型語法,可作為許多屬性的屬性值。 例如,針對筆刷顯示的 Xaml 屬性使用方式包括:<objectproperty=“predefinedColorName”/>
- 事件處理常式:這會顯示為每個事件屬性的 XAML 語法中的屬性值。 您在這裡提供的是事件處理常式函數的函數名稱。 該函式必須在 XAML 頁面的程式碼後置中定義。 在程式設計層級,該函式必須符合您正在處理之事件的委派簽章,否則您的應用程式程式碼將無法編譯。 但這實際上是程式設計考慮,而不是 XAML 考慮,因此我們不會嘗試在 XAML 語法中提示任何有關委派類型的提示。 如果您想要知道應該針對事件實作哪個委派,請查閱事件參考主題的事件資訊區段,在標示為委派的資料表列中。
- enumMemberName:顯示在所有列舉的屬性語法中。 對於使用列舉值的屬性,有一個類似的預留位置,但它通常會在預留位置前加上列舉名稱的提示。 例如, 針對 FrameworkElement.FlowDirection 顯示的語法是 <frameworkElementFlowDirection=“flowDirectionMemberName”/>。 如果您位於其中一個屬性參考頁面上,請按一下 [屬性值 ] 區段中顯示的列舉類型連結,該連結位於文字 [類型:] 旁邊。 對於使用該列舉之屬性的屬性值,您可以使用 [成員] 清單的 [成員] 資料行中列出的任何字串。
- double、 int、 string、 bool:這些是 XAML 語言已知的基本類型。 如果您使用 C# 或 Visual Basic 進行程式設計,這些類型會投影至 Microsoft .NET 對等類型,例如 Double、 Int32、 String 和 布林值,而且當您在 .NET 程式碼後置中使用 XAML 定義的值時,可以在這些 .NET 類型上使用任何成員。 如果您使用 C++/CX 進行程式設計,您將使用 C++ 基本類型,但您也可以將這些類型視為與 Platform 命名空間所定義的類型相等,例如 Platform::String。 有時,特定屬性會有額外的值限制。 但您通常會在 [屬性值 ] 區段或 [備註] 區段中看到這些,而不是在 XAML 區段中看到這些限制,因為任何這類限制都適用於程式碼使用方式和 XAML 使用方式。
提示和技巧,風格筆記
- 一般而言,標記延伸模組會在主要 XAML 概觀中說明。 但對本主題中提供的指引影響最大的標記延伸模組是 StaticResource 標記延伸模組 (和相關的 ThemeResource) 。 StaticResource 標記延伸模組的函式是讓 XAML 分解為來自 XAML ResourceDictionary 的可重複使用資源。 您幾乎一律會在 ResourceDictionary 中定義控制項範本和相關樣式。 您通常也會在 ResourceDictionary 中定義控制項範本定義或應用程式特定樣式的較小部分,例如應用程式針對 UI 不同部分多次使用的色彩的 SolidColorBrush 。 藉由使用 StaticResource,任何需要屬性元素使用方式才能設定的屬性現在都可以在屬性語法中設定。 但是,分解 XAML 以進行重複使用的好處不僅僅是簡化頁面級語法。 如需詳細資訊,請參閱 ResourceDictionary 和 XAML 資源參考。
- 您會看到數個不同的慣例,說明如何在 XAML 範例中套用空格和換行符號。 特別是,對於如何分解設定了許多不同屬性的物件元素,有不同的慣例。 這只是風格問題。 當您編輯 XAML 時,Visual Studio XML 編輯器會套用一些預設樣式規則,但您可以在設定中變更這些規則。 在少數情況下,XAML 檔案中的空格會被視為重要;如需詳細資訊,請參閱 XAML 和空格。