XamlReader 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
提供用於剖析 XAML 和建立對應物件樹狀架構的 XAML 處理器引擎。
public ref class XamlReader sealed
/// [Windows.Foundation.Metadata.ContractVersion(Microsoft.UI.Xaml.WinUIContract, 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(Microsoft.UI.Xaml.WinUIContract), 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
- 繼承
- 屬性
範例
此範例會從 XAML 字串建立單一 橢圓 形,呼叫 Load。 然後,它會將已建立但已中斷連線 的Ellipse 連接到已存在於執行中UWP app中元素的 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。 這通常是 #D52B27C006C8A44C297D3EBACB715D579 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 片段,並建立對應的物件樹狀結構,並傳回物件樹狀結構的根目錄。 也會執行任何連結範本的載入時間驗證。 |