本文會向 Windows 執行階段應用程式開發人員物件介紹 XAML 語言和 XAML 概念,並說明在 XAML 中宣告物件和設定屬性的不同方式,因為 XAML 用於建立 Windows 執行階段應用程式。
什麼是 XAML?
可延伸應用程式標記語言 (XAML) 是一種宣告式語言。 具體來說,XAML 可以使用顯示多個物件之間階層關聯性的語言結構,以及支援類型延伸的支援類型慣例來初始化物件並設定物件的屬性。 您可以在宣告式 XAML 標記中建立可見的 UI 元素。 然後,您可以為每個 XAML 檔案建立個別的程式碼後置檔案,以回應事件並操作您最初在 XAML 中宣告的物件。
XAML 語言支援在開發程式中不同工具和角色之間交換來源,例如在設計工具和互動式開發環境 (IDE) 之間,或在主要開發人員與當地語系化開發人員之間交換 XAML 來源。 藉由使用 XAML 作為交換格式,設計師角色和開發人員角色可以分開或整合在一起,設計師和開發人員可以在應用程式製作過程中反覆進行設計與開發。
當您將它們視為 Windows 執行階段應用程式專案的一部分時,XAML 檔案是副檔名為 .xaml 的 XML 檔案。
基本 XAML 語法
XAML 具有以 XML 為基礎的基本語法。 根據定義,有效的 XAML 也必須是有效的 XML。 但 XAML 也有語法概念,這些概念會指派不同且更完整的意義,同時根據 XML 1.0 規格在 XML 中仍然有效。 例如,XAML 支援 屬性元素語法,其中屬性值可以在元素內設定,而不是作為屬性中的字串值或內容。 對於一般的 XML,XAML 属性元素是名稱中帶有點的元素,因此它對於普通 XML 是合法的,但其意義不同。
XAML 和 Visual Studio
Microsoft Visual Studio 可協助您在 XAML 文字編輯器和更圖形導向的 XAML 設計介面中產生有效的 XAML 語法。 當您使用 Visual Studio 為應用程式撰寫 XAML 時,請不要太擔心每次按鍵的語法。 IDE 會藉由提供自動完成提示、在 Microsoft IntelliSense 清單和下拉式清單中顯示建議、在 [工具箱] 視窗中顯示 UI 元素庫或其他技術,以鼓勵有效的 XAML 語法。 如果這是您第一次使用 XAML,瞭解語法規則,特別是在參考或其他主題中描述 XAML 語法時,有時用來描述限制或選擇的術語可能仍然有用。 XAML 語法的精細點會在個別主題 XAML 語法指南中涵蓋。
XAML 命名空間
在一般程式設計中,命名空間是一個組織概念,可決定如何解譯程式設計實體的識別碼。 藉由使用命名空間,程式設計架構可以將使用者宣告的識別碼與架構宣告的識別碼分開、透過命名空間限定來消除識別碼的歧義、強制執行名稱範圍的規則等等。 XAML 有自己的 XAML 命名空間概念,可針對 XAML 語言提供此用途。 以下是 XAML 如何套用和擴充 XML 語言命名空間概念:
- XAML 會使用保留的 XML 屬性 xmlns 來宣告命名空間宣告。 屬性的值通常是統一資源識別碼 (URI),這是繼承自 XML 的慣例。
- XAML 會在宣告中使用前置詞來宣告非預設命名空間,而元素和屬性中的前置詞使用方式會參考該命名空間。
- XAML 具有預設命名空間的概念,這是使用方式或宣告中沒有前置詞時使用的命名空間。 預設命名空間可以針對每個 XAML 程式設計架構以不同的方式定義。
- 命名空間定義會在 XAML 檔案或建構中繼承,從父元素繼承到子元素。 例如,如果您在 XAML 檔案的根元素中定義命名空間,則該檔案內的所有元素都會繼承該命名空間定義。 如果頁面中的元素重新定義命名空間,則該元素的後代會繼承新定義。
- 元素的屬性會繼承元素的命名空間。 在 XAML 屬性上看到前置詞的情況相當罕見。
XAML 檔案幾乎一律會在其根元素中宣告預設 XAML 命名空間。 預設 XAML 命名空間會定義您可以宣告哪些元素,而不需要以前置詞限定它們。 針對一般 Windows 執行階段應用程式專案,此預設命名空間包含用於 UI 定義之 Windows 執行階段的所有內建 XAML 詞彙:預設控制項、文字元素、XAML 圖形和動畫、資料繫結和樣式支援類型等等。 因此,您將為 Windows 執行階段應用程式撰寫的大部分 XAML 在參考一般 UI 元素時,都能夠避免使用 XAML 命名空間和前置詞。
這是一個程式碼片段,顯示應用程式初始頁面的 範本創建的頁面根節點(僅顯示開始標籤,並已簡化)。 它宣告預設命名空間和 x 命名空間(我們接下來將解釋)。
<Page
x:Class="Application1.BlankPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
>
XAML 語言的 XAML 命名空間
幾乎每個 Windows 執行階段 XAML 檔案中宣告的一個特定 XAML 命名空間是 XAML 語言命名空間。 此命名空間包含 XAML 語言規格所定義的元素和概念。 依照慣例,XAML 語言 XAML 命名空間會對應至前置詞 「x」。 Windows 執行階段應用程式專案的預設專案和檔案範本一律會將預設 XAML 命名空間 (沒有前置詞,只有 xmlns=) 和 XAML 語言 XAML 命名空間 (前置詞 “x”) 定義為根元素的一部分。
「x」前置詞/XAML 語言 XAML 命名空間包含您在 XAML 中經常使用的數個程式設計建構。 以下是最常見的:
| 術語 | Description |
|---|---|
| x:鍵 | 為 XAML ResourceDictionary 中的每個資源設定唯一的使用者定義索引鍵。 索引鍵的金鑰字串是 StaticResource 標記擴展的引數,您稍後會使用此金鑰,從應用程式的其他 XAML 使用中取得 XAML 資源。 |
| x:類別 | 指定 XAML 頁面中提供後置程式碼的類別的命名空間和類別名稱。 這會命名建置動作在建置應用程式時所建立或聯結的類別。 這些建置動作支援 XAML 標記語言編譯器,並在編譯應用程式時將您的標記與後置程式碼結合。 您必須有這類類別,才能支援 XAML 頁面的後置程式碼。 Window.Content 在預設 Windows 執行階段啟用模型中。 |
| x:名稱 | 在處理 XAML 中定義的物件元素之後,指定執行時間程式碼中存在之執行個體的執行階段物件名稱。 您可以將 XAML 中的設定 x:Name 視為在程式碼中宣告具名變數。 正如您稍後會學到的,當您的 XAML 載入為 Windows 執行階段應用程式的元件時,就會發生這種情況。
註:名稱 是框架中的類似屬性,但並非所有元素都支援它。 每當該元素類型不支援 FrameworkElement.Name 時,請使用 x:Name 進行元素識別。 |
| x:uid | 識別那些應該使用當地語言資源來設定某些屬性值的元素。 如需如何使用 x:Uid 的詳細資訊,請參閱 快速入門:翻譯 UI 資源。 |
| XAML 內建資料類型 | 當屬性或資源需要時,這些類型可以指定簡單值類型的值。 這些內建類型對應於通常定義為每種程式設計語言內建定義的一部分的簡單值類型。 例如,您可能需要一個代表 true 布林值的物件,以便在 ObjectAnimationUsingKeyFrames 的分鏡腳本視覺狀態中使用。 針對 XAML 中的該值,您會使用 x:Boolean 內建類型作為物件元素,如下所示: <x:Boolean>True</x:Boolean> |
XAML 語言 XAML 命名空間中的其他程式設計建構存在,但並不常見。
將自訂類型對應至 XAML 命名空間
XAML 作為一種語言最強大的方面之一是可以輕鬆擴展 Windows 運行階段應用程序的 XAML 詞彙。 您可以使用應用程式的程式設計語言定義自己的自訂類型,然後在 XAML 標記中參考自訂類型。 使用自訂類型延伸的支援是 XAML 語言運作方式的基本內建功能。 架構或應用程式開發人員負責建立 XAML 參考的支援物件。 架構和應用程式開發人員都不受其詞彙中物件所代表或超出基本 XAML 語法規則的動作規格的約束。 (對於 XAML 語言 XAML 命名空間類型應該執行的動作有一些期望,但 Windows 執行階段提供所有必要的支援。)
如果您將 XAML 用於來自 Windows 執行階段核心程式庫和中繼資料以外的程式庫的類型,則必須宣告並對應具有前置詞的 XAML 命名空間。 在元素使用方式中使用該字首來參照程式庫中定義的類型。 您可以將前置詞對應宣告為 xmlns 屬性,通常與其他 XAML 命名空間定義一起在根元素中。
若要建立您自己的命名空間定義來參照自訂類型,請先指定關鍵字 xmlns:,然後指定您想要的字首。 該屬性的值必須包含關鍵字 using: 作為值的第一部分。 值的其餘部分是字串標籤,可依名稱參考包含自訂類型的支援程式碼的特定命名空間。
前綴定義了用於在該 XAML 檔案的其餘標記中引用 XAML 命名空間的標記權杖。 冒號字元 (:) 位於前置詞與要在 XAML 命名空間內參考的實體之間。
例如,將字首 myTypes 對映至名稱空間 myCompany.myTypes 的屬性語法為: xmlns:myTypes="using:myCompany.myTypes",而代表性元素使用方式為: <myTypes:CustomButton/>
如需了解如何對應自訂類型的 XAML 命名空間,包括 Visual C++ 組件擴展(C++/CX)的特殊考量,請參閱 XAML 命名空間和命名空間對應。
其他 XAML 命名空間
您通常會看到定義前綴「d」(用於設計命名空間)和「mc」(用於標記相容性)的 XAML 檔案。 一般而言,這些是用於基礎結構支援,或在設計時工具中啟用特定情境。 如需詳細資訊,請參閱 XAML 命名空間主題的「其他 XAML 命名空間」一節。
標記擴展
標記延伸模組是 XAML 語言概念,通常用於 Windows 執行階段 XAML 實作。 標記擴充功能通常代表某種「快捷方式」,可讓 XAML 檔案存取值或行為,而不僅僅是根據基底類型宣告元素。 某些標記延伸模組可以使用純字串或其他巢狀元素來設定屬性,目的是簡化語法或不同 XAML 檔案之間的分解。
在 XAML 屬性語法中,大括弧 “{” 和 “}” 表示 XAML 標記延伸模組使用方式。 此使用方式會指示 XAML 處理逸出將屬性值視為常值字串或直接字串可轉換值的一般處理方式。 相反地,XAML 剖析器會呼叫程式碼,為該特定標記延伸模組提供行為,而該程式碼會提供 XAML 剖析器所需的替代物件或行為結果。 標記延伸模組可以有引數,這些引數會遵循標記延伸名稱,也包含在大括弧內。 一般而言,評估的標記延伸模組會提供物件傳回值。 在剖析期間,該傳回值會插入物件樹狀結構中來源 XAML 中標記延伸使用方式的位置。
Windows 執行階段 XAML 支援這些標記延伸模組,這些延伸模組是在預設 XAML 命名空間下定義,且可由 Windows 執行階段 XAML 剖析器瞭解:
- {x:Bind}:支援資料繫結,透過執行特殊用途程式碼,將屬性評估延遲到執行階段,並在編譯階段產生。 此標記延伸模組支援廣泛的引數。
- {Binding}:支援資料繫結,透過執行一般用途的執行階段物件檢查,將屬性評估延遲到執行階段。 此標記延伸模組支援廣泛的引數。
-
{StaticResource}:支援參考 ResourceDictionary 中定義的資源值。 這些資源可以位於不同的 XAML 檔案中,但最終必須在載入時由 XAML 剖析器找到。 某
{StaticResource}使用的引數會識別 ResourceDictionary 中已排序資源的索引鍵名稱。 - {ThemeResource}:類似於 {StaticResource} ,但可以回應執行階段主題變更。 {ThemeResource} 經常出現在 Windows 執行階段預設 XAML 範本中,因為大部分這些範本都是為了與使用者在應用程式執行時切換主題相容而設計。
- {TemplateBinding}: {Binding} 的特殊案例,支援 XAML 中的控制項範本,以及執行階段的最終使用方式。
- {RelativeSource}:啟用特定形式的範本繫結,其中值來自範本化父系。
- {CustomResource}:適用於進階資源查閱案例。
Windows 執行階段也支援 {x:Null} 標記延伸模組。 您可以使用它來將 XAML 中的 Nullable 值設定為 Null 。 例如,您可以在 CheckBox 的控制項範本中使用它,該範本會將 Null 解譯為不確定的檢查狀態 (觸發「不確定」視覺狀態) 。
標記延伸模組通常會從應用程式物件圖形的其他部分傳回現有的實例,或將值延遲至執行時間。 因為您可以使用標記擴展作為屬性值,這是一般用法,所以您經常會看到標記擴展提供參考類型屬性的值,否則可能需要屬性元素語法。
例如,以下是從 ResourceDictionary 參考可重複使用的 Style 的語法: <Button Style="{StaticResource SearchButtonStyle}"/>。
Style 是參考類型,而不是簡單的值,因此如果沒有{StaticResource}使用方式,您將需要屬性<Button.Style>元素和<Style>其中的定義來設定 FrameworkElement.Style 屬性。
藉由使用標記延伸模組,XAML 中可設定的每個屬性都可能在屬性語法中設定。 您可以使用屬性語法來提供屬性的參考值,即使它不支援直接物件具現化的屬性語法。 或者,您可以啟用特定行為,以推遲 XAML 屬性必須由值類型或新創建的參考類型填入的常規要求。
為了說明,下一個 XAML 範例會使用屬性語法來設定 Border 的 FrameworkElement.Style 屬性值。 屬性 FrameworkElement.Style 會採用 Style 類別的實例,這是預設無法使用屬性語法字串建立的參考類型。 但在此情況下,屬性會參考特定的標記延伸模組 StaticResource。 處理該標記延伸模組時,它會傳回一個 Style 元素的參考,該元素先前已作為具名稱的資源定義在資源字典中。
<Canvas.Resources>
<Style TargetType="Border" x:Key="PageBackground">
<Setter Property="BorderBrush" Value="Blue"/>
<Setter Property="BorderThickness" Value="5"/>
</Style>
</Canvas.Resources>
...
<Border Style="{StaticResource PageBackground}">
...
</Border>
您可以巢狀標記延伸模組。 首先評估最內層的標記擴展。
由於標記擴展,您需要在屬性中的字面常數“{”使用特殊語法。 如需詳細資訊,請參閱 XAML 語法指南。
活動
XAML 是物件及其屬性的宣告式語言,但它也包含將事件處理常式附加至標記中物件的語法。 然後,XAML 事件語法可以透過 Windows 執行階段程式設計模型整合 XAML 宣告的事件。 您可以將事件的名稱指定為處理事件之物件的屬性名稱。 對於屬性值,您可以指定您在程式碼中定義的事件處理常式函數名稱。 XAML 處理器會使用此名稱在載入的物件樹狀結構中建立委派表示法,並將指定的處理常式新增至內部處理常式清單。 幾乎所有 Windows 執行階段應用程式都是由標記和程式碼後置來源所定義。
這是一個簡單的例子。 Button 類別支援名為 Click 的事件。 您可以撰寫 Click 的處理常式,以執行使用者按一下 Button 之後應該叫用的程式碼。 在 XAML 中,您可以將 Click 指定為 Button 上的屬性。 針對屬性值,請提供字串,該字串為處理程式的方法名稱。
<Button Click="showUpdatesButton_Click">Show updates</Button>
當您編譯時,編譯器會預期在程式碼後置文件中定義一個名為 showUpdatesButton_Click 的方法,並且位於 XAML 頁面的 x:Class 值所宣告的命名空間內。 此外,該方法必須滿足 Click 事件的委派合約。 例如:
namespace App1
{
public sealed partial class MainPage: Page {
...
private void showUpdatesButton_Click (object sender, RoutedEventArgs e) {
//your code
}
}
}
' Namespace included at project level
Public NotInheritable Class MainPage
Inherits Page
...
Private Sub showUpdatesButton_Click (sender As Object, e As RoutedEventArgs e)
' your code
End Sub
...
End Class
namespace winrt::App1::implementation
{
struct MainPage : MainPageT<MainPage>
{
...
void showUpdatesButton_Click(Windows::Foundation::IInspectable const&, Windows::UI::Xaml::RoutedEventArgs const&);
};
}
// .h
namespace App1
{
public ref class MainPage sealed {
...
private:
void showUpdatesButton_Click(Object^ sender, RoutedEventArgs^ e);
};
}
在專案中,XAML 會撰寫為 .xaml 檔案,而您可以使用偏好的語言 (C#、Visual Basic、C++/CX) 來撰寫程式碼後置檔案。 當 XAML 檔案在專案建置動作中進行標記編譯時,會藉由將命名空間和類別指定為 XAML 頁面根元素的 x:Class 屬性來識別每個 XAML 頁面的 XAML 程式碼後置檔案位置。 如需這些機制在 XAML 中運作方式,以及它們與程式設計和應用程式模型的關聯性的詳細資訊,請參閱 事件和路由事件概觀。
備註
針對 C++/CX,有兩個程式碼後置檔案:一個是標頭 (.xaml.h),另一個是實作 (.xaml.cpp)。 實現會參考標頭,從技術上講,標頭是代表程式碼後端連線進入點的。
資源字典
建立 ResourceDictionary 是一項常見工作,通常是透過將資源字典撰寫為 XAML 頁面的區域或個別 XAML 檔案來完成。 資源字典及其使用方式是較大的概念領域,不在本主題的範圍之內。 如需詳細資訊,請參閱 ResourceDictionary 和 XAML 資源參考。
XAML 和 XML
XAML 語言基本上是以 XML 語言為基礎。 但 XAML 會大幅擴充 XML。 特別是,由於結構描述與支援類型概念的關聯性,它會以完全不同的方式處理結構描述的概念,並新增附加成員和標記延伸模組等語言元素。 xml:lang 在 XAML 中有效,但會影響執行階段而不是剖析行為,而且通常會別名為架構層級屬性。 如需詳細資訊,請參閱 FrameworkElement.Language。 xml:base 在標記中有效,但剖析器會忽略它。 xml:space 是有效的,但僅與 XAML 和空格 主題中所述的案例相關。 編碼屬性在 XAML 中有效。 僅支援 UTF-8 和 UTF-16 編碼。 不支援 UTF-32 編碼。
XAML 標記語言中的大小寫敏感性
XAML 區分大小寫。 這是 XAML 以 XML 為基礎的另一個結果,即區分大小寫。 XAML 元素和屬性的名稱會區分大小寫。 屬性的值可能會區分大小寫;這取決於如何處理特定屬性的屬性值。 例如,如果屬性值宣告列舉的成員名稱,則類型轉換成員名稱字串以傳回列舉成員值的內建行為不區分大小寫。 相反地, Name 屬性的值,以及根據 Name 屬性宣告的名稱來處理物件的公用程式方法,會將名稱字串視為區分大小寫。
XAML 命名範圍
XAML 語言會定義 XAML 名稱範圍的概念。 XAML 名稱範圍概念會影響 XAML 處理器應該如何處理套用至 XAML 元素的 x:Name 或 Name 值,特別是名稱應該依賴為唯一識別碼的範圍。 XAML 名稱範圍會在個別主題中更詳細地說明;請參閱 XAML 名稱範圍。
XAML 在開發過程中的作用
XAML 在應用程式開發程式中扮演數個重要角色。
- 如果您使用 C#、Visual Basic 或 C++/CX 進行程式設計,XAML 是宣告應用程式 UI 和該 UI 中元素的主要格式。 一般而言,專案中至少有一個 XAML 檔案代表應用程式中最初顯示的 UI 的頁面隱喻。 其他 XAML 檔案可能會宣告導覽 UI 的其他頁面。 其他 XAML 檔案可以宣告資源,例如範本或樣式。
- 您可以使用 XAML 格式來宣告套用至應用程式控制項和 UI 的樣式和範本。
- 您可以使用樣式和範本來範本化現有的控制項,或定義將預設範本提供為控制項套件一部分的控制項。 當您使用它來定義樣式和範本時,相關的 XAML 通常會宣告為具有 ResourceDictionary 根目錄的離散 XAML 檔案。
- XAML 是設計工具支援建立應用程式 UI 的常見格式,以及在不同設計工具應用程式之間交換 UI 設計。 最值得注意的是,應用程式的 XAML 可以在不同的 XAML 設計工具 (或工具內的設計視窗) 之間互換。
- 其他數種技術也會定義 XAML 中的基本 UI。 與 Windows Presentation Foundation (WPF) XAML 和 Microsoft Silverlight XAML 相關,適用於 Windows 執行階段的 XAML 會針對其共用預設 XAML 命名空間使用相同的 URI。 Windows 執行階段的 XAML 詞彙與 Silverlight 使用的 XAML-for-UI 詞彙有顯著重疊,與 WPF 使用的詞彙也有部分重疊,但程度較小。 因此,XAML 可促進原本為先前技術(也使用 XAML)定義的 UI 有效移轉的路徑。
- XAML 會定義 UI 的視覺外觀,而相關聯的程式碼後置檔案會定義邏輯。 您可以調整 UI 設計,而不需要變更程式碼後置中的邏輯。 XAML 簡化了設計人員和開發人員之間的工作流程。
- 由於視覺化設計工具的豐富性和 XAML 語言的設計介面支援,XAML 在早期開發階段支援快速 UI 原型設計。
視您自己在開發程式中的角色而定,您可能不會與 XAML 互動太多。 您與 XAML 檔案互動的程度也取決於您使用的開發環境、您是否使用工具箱和屬性編輯器等互動式設計環境功能,以及 Windows 執行階段應用程式的範圍和用途。 不過,在應用程式開發期間,您可能會使用文字或 XML 編輯器在元素層級編輯 XAML 檔案。 使用這些資訊,您可以安心地編輯文字或 XML 格式的 XAML。當工具、標記編譯操作或 Windows 執行階段應用程式的運行階段使用該 XAML 檔案時,可以保持其宣告和用途的有效性。
優化 XAML 以提升載入效能
以下是使用效能最佳做法在 XAML 中定義 UI 元素的一些秘訣。 其中許多秘訣都與使用 XAML 資源有關,但為了方便起見,這裡會列在一般 XAML 概觀中。 如需 XAML 資源的詳細資訊,請參閱 ResourceDictionary 和 XAML 資源參考。 如需效能的更多秘訣,包括 XAML,它會刻意示範您應該在 XAML 中避免的一些不良效能做法,請參閱 最佳化 XAML 標記。
- 如果您在 XAML 中經常使用相同的色彩筆刷,請將 SolidColorBrush 定義為資源,而不是每次都使用具名色彩作為屬性值。
- 如果您在多個 UI 頁面上使用相同的資源,請考慮在 Application.Resources 中定義它,而不是在每個頁面上定義它。 相反地,如果只有一個頁面使用資源,請勿在 Application.Resources 中定義它,而是只針對需要它的頁面定義它。 這不僅有助於在設計應用程式時進行 XAML 的模組化,還有助於提升 XAML 剖析期間的效能。
- 請檢查您的應用程式隨包一起打包的資源中,是否有未使用的資源(即具有索引鍵,但在應用程式中並沒有以 StaticResource 進行參考的資源)。 在發行應用程式之前,請先從 XAML 中移除這些。
- 如果您使用提供設計資源 (MergedDictionaries) 的個別 XAML 檔案,請考慮從這些檔案中註解或移除未使用的資源。 即使您有在多個應用程式中使用的共用 XAML 起點,或為所有應用程式提供通用資源,每次仍是您的應用程式會封裝 XAML 資源,而且可能必須載入這些資源。
- 請勿定義組合不需要的 UI 元素,並儘可能使用預設控制項範本 (這些範本已經過負載效能的測試和驗證)。
- 使用容器,例如 Border ,而不是刻意過度繪製 UI 元素。 基本上,不要多次繪製相同的像素。 若要了解過度繪製和其測試方式的詳細資訊,請參閱 DebugSettings.IsOverdrawHeatMapEnabled。
- 使用 ListView 或 GridView 的預設專案範本;這些具有特殊的 Presenter 邏輯,可解決為大量清單項目建置視覺化樹狀結構時的效能問題。
偵錯 XAML
由於 XAML 是一種標記語言,因此無法使用 Microsoft Visual Studio 內的一些偵錯典型策略。 例如,無法在 XAML 檔案內設定中斷點。 不過,還有其他技術可協助您在開發應用程式時偵錯 UI 定義或其他 XAML 標記的問題。
當 XAML 檔案發生問題時,最典型的結果是某些系統或您的應用程式會擲回 XAML 剖析例外狀況。 每當發生 XAML 剖析例外狀況時,XAML 剖析器載入的 XAML 都無法建立有效的物件樹狀結構。 在某些情況下,例如當 XAML 代表載入為根視覺效果的應用程式第一個「頁面」時,XAML 剖析例外狀況無法復原。
XAML 通常會在 IDE 內編輯,例如 Visual Studio 及其其中一個 XAML 設計介面。 Visual Studio 通常可以在您編輯 XAML 來源時提供設計階段驗證和錯誤檢查。 例如,一旦您輸入錯誤的屬性值,它可能會在 XAML 文字編輯器中顯示「波浪線」,而且您甚至不需要等待 XAML 編譯階段,就能看到 UI 定義有問題。
應用程式實際執行之後,如果在設計階段未偵測到任何 XAML 剖析錯誤,則 Common Language Runtime (CLR) 會將這些錯誤報告為 XamlParseException。 如需您可以針對執行階段 XamlParseException 執行的動作的詳細資訊,請參閱 C# 或 Visual Basic 中 Windows 執行階段應用程式的例外狀況處理。
備註
使用 C++/CX 進行程式碼的應用程式不會取得特定的 XamlParseException。 但例外狀況中的訊息會說明錯誤的來源與 XAML 相關,並包含內容資訊,例如 XAML 檔案中的行號,就像 XamlParseException 一樣。
如需偵錯 Windows 執行階段應用程式的詳細資訊,請參閱 啟動偵錯工作階段。