XamlReader 類別

定義

提供 XAML 處理器引擎來剖析 XAML 和建立對應的物件樹狀結構。

public ref class XamlReader sealed
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
class XamlReader final
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
public sealed class XamlReader
Public NotInheritable Class XamlReader
繼承
Object Platform::Object IInspectable XamlReader
屬性

Windows 需求

裝置系列
Windows 10 (已於 10.0.10240.0 引進)
API contract
Windows.Foundation.UniversalApiContract (已於 v1.0 引進)

範例

此範例會從 XAML 字串建立單一 Ellipse ,並呼叫 Load。 然後,它會將已建立但已中斷連線的 Ellipse 連接到已存在於執行中 UWP 應用程式中之元素的 Children 集合。 最後,此範例會在使用查詢新增的位置再次存取 Ellipse ,並變更其其中一個屬性。

string xaml =
"<Ellipse Name=\"EllipseAdded\" Width=\"300.5\" Height=\"200\" 
Fill=\"Red\" xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"/>";
object ellipse = XamlReader.Load(xaml);
//stackPanelRoot is the visual root of a Page in existing XAML markup already loaded by the appmodel
stackPanelRoot.Children.Add(ellipse as UIElement);
//walk the tree using XLinq result and cast back to a XAML type to set a property on it at runtime
var result = (from item in stackPanelRoot.Children
  where (item is FrameworkElement) 
  && ((FrameworkElement) item).Name == "EllipseAdded"
  select item as FrameworkElement).FirstOrDefault();
((Ellipse) result).Fill = new SolidColorBrush(Colors.Yellow);

備註

XamlReader 是具有方法的公用程式類別,可根據字串形式之 XAML 標記的輸入來建立物件。 XamlReader 提供物件建構行為,可平行處理 XAML 剖析器Windows 執行階段 XAML 剖析的方式,以及使用 XAML 來定義 UWP 應用程式的 UI。

使用XamlReader.Load剖析 XAML 輸入會產生Windows 執行階段物件的執行時間物件樹狀結構。 物件樹狀結構可讓您在執行時間針對這些物件進行程式設計,方法是逐步執行整個樹狀結構的一部分。

當您使用 XamlReader.Load 方法從 XAML 建立物件時,有幾個重要概念:

  • XAML 內容字串必須定義單一根項目。
  • XAML 內容字串必須是格式正確的 XML,以及有效的 XAML。
  • XAML 內容必須定義預設 xmlns。 這通常是WINDOWS 執行階段 XAML 詞彙,如 所 http://schemas.microsoft.com/winfx/2006/xaml/presentation 識別。
  • XAML 命名空間對應中所參考的任何自訂群組件都必須已經可供應用程式使用。
  • XAML 不應該嘗試指定 x:Class 屬性,或包含事件處理常式的任何 XAML 定義屬性。
  • 您無法在一般 XAML 名稱範圍中使用 FindName 來尋找已新增的執行時間物件,但您可以在所建立物件的特定 XAML 名稱範圍內搜尋。 如需詳細資訊,請參閱 XAML 命名範圍
  • 物件建立邏輯無法在執行時間將載入的 XAML 與程式碼後置類別整合。 如果您想要新增事件處理常式,則必須在程式碼中參考從Load結果的物件樹狀結構內取得的物件,並使用語言特定的語法附加處理常式 (,例如) 。 +=
  • 必須有現有的 XAML 內容;您無法取代整個內容樹狀結構。 您至少必須保留原始的根項目,讓已載入 XAML 頁面的應用程式模型影響維持使用中狀態。
  • Load 建立的物件只能指派給主要物件樹狀結構中的一個位置。 如果您想要將從相同 XAML 建立的物件新增至應用程式主要物件樹狀結構的不同區域,您必須使用相同的輸入字串,針對傳回值使用不同的目的地多次剖析 XAML。
  • 剩餘的主要物件樹狀結構必須支援要設定的適當屬性。

方法

Load(String)

剖析格式正確的 XAML 片段,並建立對應的物件樹狀結構,並傳回物件樹狀結構的根目錄。

LoadWithInitialTemplateValidation(String)

剖析格式正確的 XAML 片段會建立對應的物件樹狀結構,並傳回物件樹狀結構的根目錄。 也會執行任何連結範本的載入時間驗證。

適用於

另請參閱