XAML 概觀

本文向 Windows 執行階段應用程式開發人員介紹 XAML 語言與 XAML 概念,並描述在 XAML 中宣告物件與設定屬性的不同方法,因為 XAML 可以用來建立 Windows 執行階段應用程式。

何謂 XAML?

Extensible Application Markup Language (XAML) 是一種宣告式語言。 具體來說,XAML 可以使用語言結構來初始化物件和設定物件的屬性,該語言結構顯示多個物件之間的階層式關聯性,以及支援類型延伸的支援類型慣例。 您可以在宣告式 XAML 標記中建立可見的 UI 元素。 然後,您可以為每個 XAML 檔案建立個別的程式碼後置檔案,以回應事件,並操作原本在 XAML 中宣告的物件。

XAML 語言支援在開發程式中不同工具和角色之間交換來源,例如在設計工具與互動式開發環境 (IDE) 之間交換 XAML 來源,或在主要開發人員和當地語系化開發人員之間交換 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 會藉由提供自動完成提示來鼓勵有效的 XAML 語法,在 Microsoft IntelliSense 清單和下拉式清單中顯示建議、在 [工具箱] 視窗中顯示 UI 元素程式庫或其他技術。 如果這是您第一次使用 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 命名空間和前置詞。

下面的程式碼片段顯示了應用程式初始頁面的範本所建立的 Page 根 (僅顯示開始標籤,並進行了簡化)。 它會宣告預設命名空間,以及 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 中常用的多個程式建構。 以下是最常用的建構:

詞彙 描述
x:Key 為 XAML ResourceDictionary 中的每個資源設定唯一的使用者定義索引鍵。 索引鍵的權杖字串是 StaticResource 標記延伸的引數,您稍後會使用此索引鍵,從應用程式 XAML 其他地方的其他 XAML 使用量擷取 XAML 資源。
x:Class 指定為 XAML 頁面提供程式碼後製的類別的程式碼命名空間和程式碼類別名稱。 這會為建置應用程式時由建置動作所建立或聯結的類別命名。 這些建置動作支援 XAML 標記編譯程式,並在編譯應用程式時結合您的標記和程式碼後置。 您必須有這類類別,才能支援 XAML 頁面的程式碼後置。 Window.Content 在預設 Windows 執行階段啟用模型中。
x:Name 指定處理 XAML 中定義的物件元素後,存在於執行階段程式碼中的執行個體的執行階段物件名稱。 您可以將 XAML 中的設定 x:Name 視為在程式碼中宣告命名變數。 如您稍後所瞭解,這是當 XAML 載入為 Windows 執行階段應用程式的元件時,所發生的情況。
注意:Name 是架構中的類似屬性,但並非所有元素都支援它。 當 FrameworkElement.Name 在該元素類型上不受支援時,請使用 x:Name 進行元素識別。
x:Uid 識別應該針對某些屬性值使用當地語系化資源的元素。 如需如何使用 x:Uid 的詳細資訊,請參閱快速入門:翻譯 UI 資源
XAML 內建資料類型 \(部分機器翻譯\) 當屬性或資源需要時,這些類型可以指定簡單實值類型的值。 這些內部類型對應至通常定義為每個程式設計語言內部定義的簡單實值類型。 例如,您可能需要代表真實布林值的物件,才能在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 範例使用屬性語法設定 BorderFrameworkElement.Style 屬性的值。 FrameworkElement.Style 屬性採用 Windows.UI.Xaml.Style 類別的執行個體,這是一種預設無法使用屬性語法字串建立的參考類型。 但在此情況下,屬性 (Attribute) 會參考特定的標記延伸 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 頁面的 XAML 程式碼後置檔案的位置透過將命名空間和類別指定為 XAML 根元素的 x:Class 屬性來識別。 如需這些機制如何在 XAML 中運作,以及這些機制與程式設計和應用程式模型的關係的詳細資訊,請參閱事件和路由事件概觀

注意

針對 C++/CX,有兩個程式碼後置檔案:一個是標題 (.xaml.h),另一個是實作 (.xaml.cpp)。 實作會參考標題,而且在技術上是表示程式碼後置連接進入點的標題。

資源字典

建立 ResourceDictionary 是一項常見工作,通常透過撰寫資源字典做為 XAML 頁面的區域或單獨的 XAML 檔案來完成。 資源字典及其使用方式是本主題範圍之外的較大概念區域。 如需詳細資訊,請參閱 ResourceDictionary 與 XAML 資源參考

XAML 與 XML

XAML 語言基本上是以 XML 語言為基礎。 但 XAML 會大幅擴充 XML。 特別是,它會因為架構與備份類型概念的關係而處理架構的概念,並新增附加成員和標記延伸等語言元素。 xml:lang 在 XAML 中有效,但會影響執行階段,而不是剖析行為,而且通常別名為架構層級屬性。 如需詳細資訊,請參閱 FrameworkElement.Languagexml: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:NameName 值,特別是應該依賴名稱做為唯一識別碼的範圍。 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 頁面上使用相同的資源,請考慮在 Resources 中定義資源,而不是在每個頁面上定義它。 相反地,如果只有一個頁面使用資源,請不要在 Application.Resources 中定義它,而是只針對需要它的頁面定義它。 這適用於 XAML 因素,同時設計您的應用程式,以及在 XAML 剖析期間達到效能。
  • 針對應用程式套件的資源,請檢查未使用的資源 (具有索引鍵的資源,但您的應用程式中沒有 StaticResource 參考)。 在您發行應用程式之前,請先從 XAML 移除這些項目。
  • 如果您使用個別的 XAML 檔案來提供設計資源 (MergedDictionaries),請考慮註解或移除這些檔案中未使用的資源。 即使您在多個應用程式中使用共用的 XAML 起點,或為所有應用程式提供通用資源,它仍然是您的應用程式每次封裝 XAML 資源,而且可能必須載入它們。
  • 請勿定義您不需要組合的 UI 元素,並盡可能使用預設控制項範本 (這些範本已經過測試並驗證載入效能)。
  • 使用容器,例如 Border,而不是刻意過度繪製 UI 元素。 基本上,不要多次繪製相同的像素。 如需過度繪製以及如何測試的詳細資訊,請參閱 DebugSettings.IsOverdrawHeatMapEnabled
  • 使用 ListViewGridView 的預設項目範本;它們具有特殊的 Presenter 邏輯,可以解決為大量清單項目建立視覺化樹時的效能問題。

針對 XAML 進行偵錯

由於 XAML 是標記語言,因此無法使用 Microsoft Visual Studio 內偵錯的一些典型策略。 例如,在 XAML 檔案中無法設定斷點。 不過,當您仍在開發應用程式時,還有其他技術可協助您偵錯 UI 定義或其他 XAML 標記的問題。

當 XAML 檔案發生問題時,最典型的結果是某些系統或您的應用程式會擲回 XAML 剖析例外狀況。 每當有 XAML 剖析例外狀況時,XAML 剖析器所載入的 XAML 就無法建立有效的物件樹狀結構。 在某些情況下,例如當 XAML 代表載入為根視覺效果之應用程式的第一個「頁面」時,XAML 剖析例外狀況將無法復原。

XAML 通常在 IDE (例如 Visual Studio 及其 XAML 設計介面之一) 中進行編輯。 當您編輯 XAML 來源時,Visual Studio 通常會提供設計階段驗證和錯誤檢查。 例如,一旦您輸入錯誤的屬性值,它可能會在 XAML 文字編輯器中顯示「波浪線」,您甚至不必等待 XAML 編譯階段即可發現 UI 定義有問題。

套用實際執行後,如果在設計階段未偵測到任何 XAML 解析錯誤,公共語言執行階段 (CLR) 會將這些錯誤報告為 XamlParseException。 有關可以對執行階段 XamlParseException 執行的操作的詳細資訊,請參閱 C# 或 Visual Basic 中的 Windows 執行階段應用程式的例外狀況處理

注意

使用 C++/CX 進行程式碼的應用程式不會取得特定的 XamlParseException。 但例外狀況中的訊息澄清了錯誤的來源與 XAML 相關,並包含內容資訊,例如 XAML 檔案中的行數,就像 XamlParseException 一樣。

如需偵錯 Windows 執行階段應用程式的詳細資訊,請參閱啟動偵錯工作階段