XamlReader Sınıf

Tanım

XAML girişini okur ve WPF varsayılan XAML okuyucuyu ve ilişkili bir XAML nesne yazıcısını kullanarak bir nesne grafı oluşturur.

public ref class XamlReader
public class XamlReader
type XamlReader = class
Public Class XamlReader
Devralma
XamlReader

Örnekler

Aşağıdaki örnek, sınıfını kullanarak bir Button dizeye XamlWriter dönüştürür. Dize daha sonra sınıfındaki XamlReader statik Load yöntem kullanılarak öğesine Button geri yüklenir.

// Create the Button.
Button originalButton = new Button();
originalButton.Height = 50;
originalButton.Width = 100;
originalButton.Background = Brushes.AliceBlue;
originalButton.Content = "Click Me";

// Save the Button to a string.
string savedButton = XamlWriter.Save(originalButton);

// Load the button
StringReader stringReader = new StringReader(savedButton);
XmlReader xmlReader = XmlReader.Create(stringReader);
Button readerLoadButton = (Button)XamlReader.Load(xmlReader);
' Create the Button.
Dim originalButton As New Button()
originalButton.Height = 50
originalButton.Width = 100
originalButton.Background = Brushes.AliceBlue
originalButton.Content = "Click Me"

' Save the Button to a string.
Dim savedButton As String = XamlWriter.Save(originalButton)

' Load the button
Dim stringReader As New StringReader(savedButton)
Dim xmlReader As XmlReader = XmlReader.Create(stringReader)
Dim readerLoadButton As Button = CType(XamlReader.Load(xmlReader), Button)

Açıklamalar

Zaman uyumlu Load yöntemler statiktir, ancak zaman uyumsuz LoadAsync yöntemler statik değildir ve kullanmak için sınıfın bir örneğini XamlReader gerektirir.

Yöntemlerin Load çıkışı, oluşturulan bir nesne ağacının veya nesne grafiğinin kök nesnesini temsil eden tek bir nesnedir. tarafından XamlReader oluşturulan nesne grafikleri genellikle çalışma zamanında WPF uygulamasının mevcut nesne ağacına eklenir. Aksi takdirde yeni nesne grafının WPF uygulama modelinin amaçları doğrultusunda bağlantısı kesilmiş olarak kabul edilir. Bu, WPF uygulamasının ana nesne ağacına (örneğin, API'leriFindNameLogicalTreeHelperVisualTreeHelper) uygulandığı şekilde nesne ağacı tekniklerinden herhangi biri kullanılarak işlenmediği ve erişilemeyeceği anlamına gelir. Nesne ağacı kavramları hakkında daha fazla bilgi için bkz . WPF'deki ağaçlar.

XamlReader aşağıdaki birincil senaryoları destekler:

  • Kopyalama/nesne fabrikası: Ek mekanizmalar olmadan, bir başvuru türü genellikle WPF nesne ağacında birden fazla konuma eklenemez. (WPF'de paylaşım veya yeniden kullanım desteği sunan ek mekanizmalara örnek olarak, tabanlı Freezablenesneler veya öğesinden ResourceDictionarybir öğe olarak başvurulan gibi Brush yaygın olarak paylaşılabilir nesneler için destek verilebilir.) Zaten nesne ağacında olan bir nesneyi kopyalamanın bir yolu, kullanarak XamlWriter.Savenesneyi seri hale getirmektir. Ardından serileştirilmiş dizeyi bir akışla veya XmlReader aracı olarak çağrısı için Loadgiriş olarak kullanırsınız.

  • Nesneleri tam zamanında bilgilere göre oluşturma: Genellikle geç bağlama veya kullanıcı tarafından sağlanan girişin var olan nesnelerin durumunu değiştirmesini sağlamanın başka yolları da vardır. Örneğin, birden fazla özellik ayarlamak için aynı değeri kullanabilir veya veri bağlamayı kullanabilirsiniz. Ancak, oluşturulacak nesne türünün bile yalnızca çalışma zamanında veya kullanıcı etkileşimiyle belirlenebilir olduğu bir senaryonuz varsa, giriş için Load bir dize oluşturarak böyle bir nesne oluşturmak genellikle yararlı bir tekniktir.

  • Mevcut kaynak tekniklerini kullanma: Tür Stream , uygulama sınırları arasında veya benzer durumlarda veri veya nesne aktarımı için diğer çerçevelerde veya teknolojilerde sıklıkla kullanılır. Daha sonra uygulamanızın Stream bir parçası olarak nesne oluşturmak için kullandığınız XAML biçimli verileri depolamak veya elde etmek için teknikleri kullanabilirsiniz.

  • Düzeltildi belgeler: Uygulamanız, WPF uygulama nesne ağacına ve kullanıcı arabirimine dahil edilmesi için yerel veya indirilen XPS belgelerini yükleyebilir.

Not

Bu belgelerde bazen nesne ağacının aksine bir nesne grafı açıklanır. Katı bir üst-alt ilişki, bir çalışma zamanı WPF uygulamasının çalışma zamanı nesne ilişkilerinde her zaman yoktur, bu nedenle nesne grafı daha yaygın bir terminolojidir. Ancak WPF iki farklı ağaç kavramsallaştırma API'sini (LogicalTreeHelper, VisualTreeHelper) içerdiğinden, ağaç metaforu WPF'deki gerçek dünya olaylarının çoğuna yeterli şekilde uygulanır. Ancak XAML dili açısından bakıldığında nesne grafı genellikle nesnelerin XAML'den nasıl oluşturulduğunu düşünmenin en iyi yoludur çünkü XAML dilinin kendisi ilişkileri yeniden ağaç yapısına daha çok getiren yardımcı sınıf yöntemlerini belirtmez.

Kod Erişimi Güvenliği, Gevşek XAML ve XamlReader

XAML, nesne örnekleme ve yürütmeyi doğrudan temsil eden bir işaretleme dilidir. Bu nedenle, XAML'de oluşturulan öğeler, sistem kaynaklarıyla (örneğin ağ erişimi, dosya sistemi GÇ) eşdeğer oluşturulan kodla etkileşim kurma özelliğine sahiptir.

WPF, .NET güvenlik çerçevesi Kod Erişim Güvenliği'ni (CAS) destekler. Bu, internet bölgesinde çalıştırılan WPF içeriğinin yürütme izinlerini azalttığı anlamına gelir. "Gevşek XAML" (XAML görüntüleyicisi tarafından yükleme zamanında yorumlanan derlenmemiş XAML sayfaları) ve XAML tarayıcı uygulaması (XBAP) genellikle bu internet bölgesinde çalıştırılır ve aynı izin kümesini kullanır. Ancak, tam olarak güvenilen bir uygulamaya yüklenen XAML, sistem kaynaklarına barındırma uygulamasıyla aynı erişime sahiptir. Daha fazla bilgi için bkz. WPF Kısmi Güven Güvenliği.

Bu deyimlerin XamlReader etkileri, uygulama tasarımınızın yüklemeye karar vereceğiniz XAML hakkında güven kararları vermesi gerektiğidir. Güvenilir olmayan XAML'yi yüklüyorsanız, sonuçta elde edilen nesne grafını nasıl yüklediğinize ilişkin kendi korumalı alan tekniğinizi uygulamayı göz önünde bulundurun.

XamlReader kısmi güven koduyla da çağrılabilir. Bu durumda, kod erişim güvenliği için İnternet güvenlik bölgesi uygulanır. Yüklenen XAML'deki herhangi bir şey İnternet güvenlik bölgesi altında geçersizse, bir XAML ayrıştırma özel durumu oluşturulur. Yürütmenin bir parçası olan XamlReader platform düzeyinde kısmi güven olan XBAP ve diğer durumlar altında, açık kısmi güven çağrılarıyla aynı özel durum davranışını elde edersiniz.

WPF XAML, XAML Okuyucuları/Yazıcıları ve XAML Dil Sürümü Oluşturma

XAML2009 , x:Reference ve x:FactoryMethod gibi dil özelliklerini içerir. bu özellikleri kullanan XAML'yi yüklemek için veya Parse imzalarını Load kullanabilirsiniz. Bununla birlikte, bu dil özellikleri işaretlemenin derlenmesi gereken XAML için desteklenmez (wpf uygulamasındaki Sayfa derleme eylemi için XAML veya derleme eylemlerinde işaretleme derleme görevini içeren herhangi bir XAML gibi).

WPF türleri ve WPF teknolojisi genel olarak WPF iç bileşenlerine erişimi temel alan kavramları destekler. Örneğin WPF'nin bağımlılık özelliklerini uygulaması, etkili tür üyesi araması için iç tekniklere dayanır. Bu iç bileşenlere erişim, ad alanı ve PresentationFramework derlemesinde ve içinde System.Windows.Markup sağlanan XAML okuma ve XamlReader yazma API'leri XamlWriter tarafından etkinleştirilir. Ancak, System.Xaml derlemesinden (öğesini temel alan System.Xaml.XamlReaderSystem.Xaml.XamlWritersınıflar) alt düzey XAML okuyucularının ve XAML yazıcılarının WPF iç öğelerine erişimi yoktur. System.Xaml'den WPF'ye özgü herhangi bir derlemeye bağımlılık yoktur. WPF içlerine erişim olmadan, System.Xaml okuyucuları ve yazıcıları tüm WPF türlerini veya WPF türlerini temel alan türleri doğru şekilde yükleyemez veya kaydedemez. Özellikle, System.Xaml okuyucuları ve yazarları WPF bağımlılık özelliği yedekleme özellik deposu gibi kavramları veya WPF'nin stilleri, kaynak sözlüklerini ve şablonları nasıl kullandığına ilişkin tüm özellikleri anlamaz. Bu nedenle, aşağıdakileri yapma seçeneğiniz vardır:

  • WPF türlerini yüklüyorsanız ve/veya BAML biçiminde herhangi bir şekilde XAML kullanıyorsanız PresentationFramework XAML okuyucularını ve XAML yazıcılarını kullanın.

  • Herhangi bir WPF türüne veya XAML'nin BAML biçimine bağımlı değilseniz ve bu çerçeveye özgü nedenlerle başka bir teknolojinin XAML okuyucusu veya XAML yazıcı uygulamasını kullanmıyorsanız System.Xaml XAML okuyucularını ve XAML yazıcılarını kullanın.

.NET 4'te System.Xaml Yedekleme Uygulaması

XamlReader WPF çerçeve düzeyi XAML ayrıştırıcısı için çağrılabilen API yüzeyidir. Aynı temel XAML ayrıştırıcısı, 3.0 ve .NET Framework .NET Framework 3.5'i hedefleyen WPF uygulamaları için çalışma zamanı XAML yükleme ve ayrıştırma işlemlerini de gerçekleştirir.

.NET Framework 4'i hedefliyorsanız, dış API aynıdır, ancak uygulamanın bazı bölümleri System.Xaml derlemesindeki .NET Framework 4 genel XAML uygulaması üzerine oluşturulur ve bu da XAML ayrıştırma işleminin teknik ve raporlama yönlerinin çoğunu geliştirir. .NET Framework 4'ü hedeflemek için başvuru olarak System.Xaml de dahil olmak üzere gerekli olabilir ve bildirilen özel durumlar gibi uygulama ayrıntıları System.Xaml tanımlı türlerden gelebilir.

Oluşturucular

XamlReader()

XamlReader sınıfının yeni bir örneğini başlatır.

Yöntemler

CancelAsync()

Bekleyen zaman uyumsuz bir yükleme işlemi varsa geçerli zaman uyumsuz yükleme işlemini durdurur.

Equals(Object)

Belirtilen nesnenin geçerli nesneye eşit olup olmadığını belirler.

(Devralındığı yer: Object)
GetHashCode()

Varsayılan karma işlevi işlevi görür.

(Devralındığı yer: Object)
GetType()

Type Geçerli örneğini alır.

(Devralındığı yer: Object)
GetWpfSchemaContext()

bir XamlSchemaContext için WPF şeması bağlam ayarlarını temsil eden bir XamlReadernesnesi döndürür.

Load(Stream)

Belirtilen Stream içindeki XAML girişini okur ve karşılık gelen nesne ağacının kökü olan bir Object döndürür.

Load(Stream, Boolean)

XAML girişini okur ve WPF varsayılan XAML okuyucuyu ve ilişkili bir XAML nesne yazıcısını kullanarak bir nesne grafı oluşturur.

Load(Stream, ParserContext)

Belirtilen Stream içindeki XAML girişini okur ve ilgili nesne ağacının kökü olan bir nesne döndürür.

Load(Stream, ParserContext, Boolean)

XAML girişini okur ve WPF varsayılan XAML okuyucuyu ve ilişkili bir XAML nesne yazıcısını kullanarak bir nesne grafı oluşturur.

Load(XamlReader)

Sağlanan XamlReader bir aracılığıyla XAML girişini okur ve ilgili nesne ağacının kökü olan bir nesne döndürür.

Load(XmlReader)

Belirtilen XmlReader içindeki XAML girişini okur ve ilgili nesne ağacının kökü olan bir nesne döndürür.

Load(XmlReader, Boolean)

XAML girişini okur ve WPF varsayılan XAML okuyucuyu ve ilişkili bir XAML nesne yazıcısını kullanarak bir nesne grafı oluşturur.

LoadAsync(Stream)

Belirtilen Stream içindeki XAML girişini okur ve karşılık gelen nesne ağacının kökünü döndürür.

LoadAsync(Stream, Boolean)

XAML girişini okur ve WPF varsayılan XAML okuyucuyu ve ilişkili bir XAML nesne yazıcısını kullanarak bir nesne grafı oluşturur.

LoadAsync(Stream, ParserContext)

Belirtilen Stream içindeki XAML girişini okur ve karşılık gelen nesne ağacının kökünü döndürür.

LoadAsync(Stream, ParserContext, Boolean)

XAML girişini okur ve WPF varsayılan XAML okuyucuyu ve ilişkili bir XAML nesne yazıcısını kullanarak bir nesne grafı oluşturur.

LoadAsync(XmlReader)

Belirtilen XmlReader içindeki XAML girişini okur ve karşılık gelen nesne ağacının kökünü döndürür.

LoadAsync(XmlReader, Boolean)

XAML girişini okur ve WPF varsayılan XAML okuyucuyu ve ilişkili bir XAML nesne yazıcısını kullanarak bir nesne grafı oluşturur.

MemberwiseClone()

Geçerli Objectöğesinin sığ bir kopyasını oluşturur.

(Devralındığı yer: Object)
Parse(String)

Belirtilen metin dizesindeki XAML girişini okur ve belirtilen işaretlemenin köküne karşılık gelen bir nesne döndürür.

Parse(String, Boolean)

XAML girişini okur ve WPF varsayılan XAML okuyucuyu ve ilişkili bir XAML nesne yazıcısını kullanarak bir nesne grafı oluşturur.

Parse(String, ParserContext)

Belirtilen metin dizesindeki XAML işaretlemesini okur (belirtilen bir kullanarak) ve belirtilen ParserContextişaretlemenin köküne karşılık gelen bir nesne döndürür.

Parse(String, ParserContext, Boolean)

XAML girişini okur ve WPF varsayılan XAML okuyucuyu ve ilişkili bir XAML nesne yazıcısını kullanarak bir nesne grafı oluşturur.

ToString()

Geçerli nesneyi temsil eden dizeyi döndürür.

(Devralındığı yer: Object)

Ekinlikler

LoadCompleted

Zaman uyumsuz bir yükleme işlemi tamamlandığında gerçekleşir.

Şunlara uygulanır

Ayrıca bkz.