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 Button statik Load yöntemi kullanılarak öğesine XamlReader 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, wpf uygulama modelinin amaçları doğrultusunda yeni nesne grafiğinin bağlantısı kesilmiş olarak kabul edilir. Bu, WPF uygulamasının ana nesne ağacına (örneğin, API FindName'ler , , LogicalTreeHelperVisualTreeHelper) uygulandığı gibi 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 Brushbir öğe olarak başvurulan gibi ResourceDictionary yaygın olarak paylaşılabilir nesneler için destek verilebilir.) Nesne ağacında zaten bulunan bir nesneyi kopyalamanın bir yolu, kullanarak XamlWriter.Savenesneyi seri hale getirmektir. Ardından serileştirilmiş dizeyi bir akışla veya Load aracı olarak çağrısı için XmlReadergiriş 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: Bu Stream tür, 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 almak için teknikleri kullanabilirsiniz.

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

Note

Bu belgelerde bazen nesne ağacının aksine nesne grafı açıklanmaktadı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 de (LogicalTreeHelper, ) içerdiğinden, VisualTreeHelperağaç metaforu WPF'deki çoğu gerçek dünya örneğine yeterince 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şim 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ışan WPF içeriğinin yürütme izinlerini azalttığı anlamına gelir. "Loose XAML" (XAML görüntüleyicisi tarafından yük 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, barındırma uygulamasıyla aynı sistem kaynaklarına erişime sahiptir. Daha fazla bilgi için bkz. WPF Kısmi Güvenilirlik 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ı yükleme şeklinize yönelik kendi korumalı alan tekniğinizi uygulamayı göz önünde bulundurun.

XamlReader kısmi güven kodu tarafından da çağrılabilir. Bu durumda, kod erişimi 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 XBAP ve platform düzeyinde kısmi güven olan 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 Load imzalarını Parse kullanabilirsiniz. Ancak, bu dil özellikleri, işaretlemenin derlenmesi gereken XAML için desteklenmez (wpf uygulamasında 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 kullanan kavramları destekler. Örneğin WPF'nin bağımlılık özelliklerini uygulaması, verimli tür üyesi araması için iç tekniklere dayanır. Bu iç bileşenlere erişim, ad alanı ve PresentationFramework derlemesinde ve içinden XamlWriter sağlanan XAML okuma ve XamlReader yazma API'leri System.Windows.Markup 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 yazıcıları 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ı, .NET Framework 3.0 ve .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 hedef alıyorsanız, dış API aynıdır, ancak uygulamanın bazı bölümleri System.Xaml derlemesindeki .NET Framework 4 genel XAML uygulamasında oluşturulur ve bu da XAML ayrıştırma işleminin birçok teknik ve raporlama yönünü geliştirir. .NET Framework 4'ün hedeflenmesi, 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

Name Description
XamlReader()

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

Yöntemler

Name Description
CancelAsync()

Bekleyen zaman uyumsuz bir yük 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()

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

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

bir XamlSchemaContext için WPF şema bağlam ayarlarını temsil eden bir XamlReadernesne 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, 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 karşılık gelen nesne ağacının kökü olan bir nesne 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(XamlReader)

Sağlanan XamlReader bir aracılığıyla XAML girişini okur ve karşılık gelen 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.

Load(XmlReader)

Belirtilen XmlReader içindeki XAML girişini okur ve karşılık gelen nesne ağacının kökü olan bir nesne 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, 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 ilgili nesne ağacının kökünü döndürür.

LoadAsync(Stream)

Belirtilen Stream içindeki XAML girişini okur ve ilgili 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.

LoadAsync(XmlReader)

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

MemberwiseClone()

Geçerli Objectbasit bir kopyasını oluşturur.

(Devralındığı yer: Object)
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, 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 ParserContextbir kullanarak) ve belirtilen işaretlemenin köküne karşılık gelen bir nesne döndürür.

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.

ToString()

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

(Devralındığı yer: Object)

Ekinlikler

Name Description
LoadCompleted

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

Şunlara uygulanır

Ayrıca bkz.