XamlReader 클래스

정의

WPF 기본 XAML 판독기 및 연결된 XAML 개체 기록기를 사용하여 XAML 입력을 읽고 개체 그래프를 만듭니다.Reads XAML input and creates an object graph, using the WPF default XAML reader and an associated XAML object writer.

public ref class XamlReader
public class XamlReader
type XamlReader = class
Public Class XamlReader
상속
XamlReader

예제

다음 예제에서는 Button 클래스를 사용 하 여를 문자열로 변환 합니다 XamlWriter .The following example converts a Button into a string using the XamlWriter class. 그런 다음이 문자열은 Button 클래스의 정적 메서드를 사용 하 여에 다시 로드 됩니다 Load XamlReader .The string is then loaded back into a Button using the static Load method on the XamlReader class.

// 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)

설명

동기 Load 메서드는 정적 이지만 비동기 메서드는 정적이 지 않으며 LoadAsync 사용할 클래스의 인스턴스가 필요 XamlReader 합니다.The synchronous Load methods are static, but the asynchronous LoadAsync methods are not static and require an instance of the XamlReader class to use.

메서드의 출력은 Load 생성 된 개체 트리 또는 개체 그래프의 루트 개체를 나타내는 단일 개체입니다.The output of the Load methods is a single object, which represents the root object of a created object tree or object graph. 개체에서 만든 그래프 XamlReader 일반적으로 런타임에 WPF 애플리케이션의 기존 개체 트리에 추가 됩니다.Object graphs that are created by XamlReader are typically added to the existing object tree of a WPF application at run time. 그렇지 않은 경우 새 개체 그래프 WPF 애플리케이션 모델의 목적에 대 한 연결이 끊어진 것으로 간주 됩니다.Otherwise the new object graph is considered disconnected for purposes of the WPF application model. 즉, 렌더링 하지 않습니다 하 고 적용할 수 없습니다 액세스를 사용 하 여 개체 트리 기법으로 WPF 애플리케이션의 기본 개체 트리 (예를 들어 Api FindName, LogicalTreeHelper, VisualTreeHelper).This means that it does not render, and cannot be accessed using any of the object tree techniques as applied to the WPF application's main object tree (for example, the APIs FindName, LogicalTreeHelper, VisualTreeHelper). 개체 트리 개념에 대 한 자세한 내용은 WPF의 트리를 참조 하세요.For more information on object tree concepts, see Trees in WPF.

XamlReader 는 다음과 같은 주요 시나리오를 지원 합니다.XamlReader supports the following primary scenarios:

  • 복제/개체 팩터리: 추가 메커니즘이 없으면 일반적으로 참조 형식이 WPF 개체 트리에서 둘 이상의 위치에 포함 될 수 없습니다.Cloning/object factory: Without additional mechanisms, a reference type generally cannot be included in more than one position in a WPF object tree. WPF에서 공유 하거나 다시 사용 하기 위한 지원을 제공 하는 추가 메커니즘의 예로는를 기반으로 하는 개체 Freezable 또는 Brush 에서 항목으로 참조 되는와 같이 일반적으로 공유할 수 있는 개체에 대 한 지원이 ResourceDictionary 있습니다. 개체 트리에 이미 있는 개체를 복제 하는 한 가지 방법은를 사용 하 여 개체를 serialize 하는 것입니다 XamlWriter.Save .(Examples of additional mechanisms that offer support for sharing or re-use in WPF include objects that are based on Freezable, or support for commonly shareable objects such as Brush that are referenced as an item from a ResourceDictionary.) One way to clone an object that is already in the object tree is to serialize the object using XamlWriter.Save. 그런 다음 직렬화 된 문자열을에 대 한 호출에 대 한 입력으로 사용 Load 하거나 스트림이나 XmlReader 로 사용 합니다.You then use the serialized string as input for a call to Load, with a stream or XmlReader as an intermediary.

  • Just-in-time 정보를 기반으로 개체 생성: 후기 바인딩 또는 사용자가 제공 하는 입력으로 기존 개체의 상태를 변경 하는 다른 방법이 종종 있습니다.Constructing objects based on just-in-time information: There are often other ways to have late-binding or user-supplied input change the state of existing objects. 예를 들어 같은 값을 사용 하 여 둘 이상의 속성을 설정 하거나 데이터 바인딩을 사용할 수 있습니다.For example you could use the same value to set more than one property, or use data binding. 그러나 만들 개체의 형식을 런타임 또는 사용자 상호 작용 으로만 결정할 수 있는 시나리오가 있는 경우 입력을 위한 문자열을 작성 하 여 이러한 개체를 만드는 Load 것이 유용한 방법입니다.But if you have a scenario where even the type of object to create is only determinable at run time or with user interaction, then creating such an object by building up a string for Load input is often a useful technique.

  • 기존 리소스 기술을 사용 하 여:는 Stream 형식에서 자주 사용 됩니다 다른 프레임 워크 또는 기술 애플리케이션 경계를 넘어 데이터 나 개체를 전송 하는 것에 대 한 또는 이와 유사한 상황에 대 한 합니다.Using existing resource techniques: The Stream type is used frequently in other frameworks or technologies for transferring data or objects across application boundaries or for similar situations. 사용할 수는 Stream 저장소나 결국 애플리케이션의 일부로 개체를 만드는 데 사용 하는 XAML 형식의 데이터를 가져오는 방법입니다.You can then use the Stream techniques to store or obtain XAML-formatted data that you eventually use to create an object as part of your application.

  • 고정 문서: 애플리케이션에서 WPF 애플리케이션 개체 트리를 UI에 포함 하기 위해 로컬 또는 다운로드 한 XPS 문서를 로드할 수 있습니다.Fixed documents: Your application might load local or downloaded XPS documents for inclusion in a WPF application object tree and UI.

참고

이 설명서에서는 개체 트리가 아닌 개체 그래프를 설명 하는 경우도 있습니다.This documentation sometimes describes an object graph, as opposed to an object tree. 엄격한 부모-자식 관계를 항상 없으므로 런타임 WPF 애플리케이션의 런타임 개체 관계에서 개체 그래프를 보다 광범위 하 게 해당 용어는 합니다.A strict parent-child relationship does not always exist in the run time object relationships of a run time WPF application, so an object graph is a more widely applicable terminology. 그러나 WPF는 두 개의 다른 트리 개념화 Api (,)를 포함 하기 때문에 LogicalTreeHelper VisualTreeHelper wpf의 대부분의 실제 사례에도 트리 메타포를 적절 하 게 적용 합니다.However, because WPF also includes two different tree conceptualization APIs (LogicalTreeHelper, VisualTreeHelper) the tree metaphor still applies adequately to most real-world cases in WPF. 그러나 xaml 언어 관점에서 볼 때 개체 그래프는 일반적으로 xaml에서 개체를 만드는 방법에 대해 생각 하는 가장 좋은 방법입니다 .이는 XAML 언어 자체에서 관계를 트리 구조로 다시 가져오는 도우미 클래스 방법론을 지정 하지 않아도 되기 때문입니다.From the XAML language perspective however, the object graph is often the best way to think about how objects are created out of XAML, because the XAML language itself does not necessarily specify helper class methodologies that bring the relationships more into a tree structure again.

코드 액세스 보안, 느슨한 XAML 및 XamlReaderCode Access Security, Loose XAML, and XamlReader

XAML은 개체 인스턴스화 및 실행을 직접적으로 나타내는 태그 언어입니다.XAML is a markup language that directly represents object instantiation and execution. 따라서 XAML에서 만든 요소에는 생성된 해당 코드가 수행하는 것과 마찬가지로 시스템 리소스(예: 네트워크 액세스, 파일 시스템 IO)와 상호 작용하는 동일한 기능이 있습니다.Therefore, elements created in XAML have the same ability to interact with system resources (network access, file system IO, for example) as the equivalent generated code does.

WPFWPF .NET.NET 보안 프레임 워크를 지원 CAS(코드 액세스 보안)Code Access Security (CAS) 합니다.supports the .NET.NET security framework CAS(코드 액세스 보안)Code Access Security (CAS). 즉, 인터넷 영역에서 실행되는 WPFWPF 콘텐츠는 실행 권한이 줄어듭니다.This means that WPFWPF content running in the internet zone has reduced execution permissions. 이때 "느슨한 XAML"(컴파일되지 않은 XAML의 페이지가 로드 시 XAML 뷰어에 의해 해석됨) 및 XBAP(XAML 브라우저 애플리케이션)XAML browser application (XBAP)는 일반적으로 이 인터넷 영역에서 실행되며 같은 권한 집합을 사용합니다."Loose XAML" (pages of noncompiled XAML interpreted at load time by a XAML viewer) and XBAP(XAML 브라우저 애플리케이션)XAML browser application (XBAP) are usually run in this internet zone and use the same permission set. 하지만 완전히 신뢰할 수 있는 애플리케이션으로 로드된 XAML은 시스템 리소스에 대해 호스팅 애플리케이션과 동일한 액세스 권한을 가집니다.However, XAML loaded in to a fully trusted application has the same access to the system resources as the hosting application does. 자세한 내용은 WPF 부분 신뢰 보안을 참조하세요.For more information, see WPF Partial Trust Security.

에 대 한 이러한 문 미치는 XamlReader 애플리케이션 디자인 로드 하려는 XAML에 대 한 신뢰 결정을 내려야 하는 합니다.The implications of these statements for XamlReader is that your application design must make trust decisions about the XAML you decide to load. 신뢰할 수 없는 XAML을 로드 하는 경우 결과 개체 그래프를 로드 하는 방법에 대 한 사용자 고유의 샌드 박싱 기술을 구현 하는 것이 좋습니다.If you are loading XAML that is not trusted, consider implementing your own sandboxing technique for how you load the resulting object graph.

XamlReader 부분 신뢰 코드에 의해 호출 될 수도 있습니다.XamlReader can also be called by partial trust code. 이 경우에는 코드 액세스 보안을 위해 인터넷 보안 영역이 적용 됩니다.In this case, Internet security zone is applied for code access security. 로드 된 XAML의 모든 항목이 인터넷 보안 영역에서 잘못 된 경우 XAML 구문 분석 예외가 throw 됩니다.If anything in the loaded XAML is invalid under Internet security zone, a XAML parse exception is thrown. XBAP 및 플랫폼 수준에서 부분 신뢰 되는 기타 경우에는 XamlReader 명시적 부분 신뢰 호출의 경우와 동일한 예외 동작을 얻게 됩니다.Under XBAP and other cases that are partial trust at the platform level, where XamlReader is part of the execution, you get the same exception behavior as with explicit partial trust calls.

WPF XAML, XAML 판독기/작성기 및 XAML 언어 버전 관리WPF XAML, XAML Readers/Writers, and XAML Language Versioning

XAML2009에는 X:reference , x:FactoryMethod등의 언어 기능이 포함 되어 있습니다.XAML2009 includes language features such as x:Reference and x:FactoryMethod. 또는의 시그니처를 사용 하 여 Load Parse 이러한 기능을 사용 하는 XAML을 로드할 수 있습니다.You can use signatures of Load or Parse to load XAML that uses these features. 그러나 이러한 언어 기능은 태그를 컴파일해야 하는 XAML에 대 한 지원 되지 않습니다 (에 대 한 XAML 같은 페이지 는 WPF 애플리케이션 또는 빌드 작업에서 태그 컴파일 작업을 포함 하는 모든 XAML에서 빌드 작업).However, those language features are not supported for XAML that needs to be markup compiled (such as XAML for the Page build action in a WPF application, or any XAML that involves the markup compile task in the build actions).

Wpf 형식 및 wpf 기술은 일반적으로 WPF 내부에 대 한 액세스를 사용 하는 개념을 지원 합니다.WPF types and the WPF technology in general support concepts that rely on access to WPF internals. 예를 들어 WPF에서 종속성 속성을 구현 하는 방법은 효율적인 형식 멤버 조회를 위한 내부 기술에 의존 합니다.For instance, how WPF implements dependency properties relies on internal techniques for efficient type-member lookup. 이러한 내부 액세스는 XamlWriterXamlReader System.Windows.Markup 네임 스페이스 및 PresentationFramework 어셈블리에서 제공 된 api를 읽고 쓰는 XAML을 통해 사용 하도록 설정 됩니다.Access to these internals is enabled by the XAML reading and writing APIs provided in XamlWriter and XamlReader from the System.Windows.Markup namespace and PresentationFramework assembly. 그러나 system.xaml 어셈블리 (에 기반 하는 클래스)의 하위 수준 XAML 판독기와 XAML 작성기는 System.Xaml.XamlReader System.Xaml.XamlWriter WPF 내부에 액세스할 수 없습니다.However, the lower-level XAML readers and XAML writers from the System.Xaml assembly (classes based on System.Xaml.XamlReader, System.Xaml.XamlWriter) do not have access to the WPF internals. System.xaml에서 WPF 관련 어셈블리에 대 한 종속성이 없습니다.There is no dependency from System.Xaml to any WPF-specific assembly. WPF 내부에 액세스할 수 없는 경우에는 System.xaml 판독기와 작성기가 모든 WPF 형식 또는 WPF 형식을 기반으로 하는 형식을 올바르게 로드 하거나 저장할 수 없습니다.Without access to the WPF internals, System.Xaml readers and writers cannot correctly load or save all WPF types, or types based on WPF types. 특히, System.xaml 판독기와 작성기는 WPF 종속성 속성 지원 속성 저장소와 같은 개념 또는 WPF가 스타일, 리소스 사전 및 템플릿을 사용 하는 방법에 대 한 모든 세부 정보를 이해 하지 못합니다.In particular, the System.Xaml readers and writers do not understand concepts such as the WPF dependency property backing property store, or all the specifics of how WPF uses styles, resource dictionaries and templates. 따라서 다음과 같이 선택할 수 있습니다.Therefore you have a choice to make:

  • WPF 형식을 로드 하거나 BAML 폼에서 XAML을 사용 하는 경우 PresentationFramework XAML 판독기와 XAML 작성기를 사용 합니다.If you are loading WPF types, and/or you are using XAML in BAML form in any way, use the PresentationFramework XAML readers and XAML writers.

  • WPF 형식이 나 BAML 형식의 XAML을 사용 하지 않고 해당 프레임 워크와 관련 된 이유로 다른 특정 기술의 XAML 판독기 또는 XAML 작성기 구현을 사용 하지 않는 경우 System.xaml XAML 판독기와 XAML 작성기를 사용 합니다.If you are not relying on any WPF types or the BAML form of XAML, and are not using another specific technology's XAML reader or XAML writer implementation for reasons that are specific to that framework, use the System.Xaml XAML readers and XAML writers.

.NET 4의 System.xaml 지원 구현System.Xaml Backing Implementation in .NET 4

XamlReader 는 WPF 프레임 워크 수준 XAML 파서의 호출 가능 API 화면입니다.XamlReader is the callable API surface for the WPF framework-level XAML parser. 동일한 기본 XAML 파서를 로드 하 고 대상으로 하는 WPF 애플리케이션에 대 한 구문 분석 하는 런타임에 XAML 성능도 .NET Framework 3.0.NET Framework 3.0.NET Framework 3.5.NET Framework 3.5입니다.The same underlying XAML parser also performs the run-time XAML loading and parsing for WPF applications that target .NET Framework 3.0.NET Framework 3.0 and .NET Framework 3.5.NET Framework 3.5.

대상으로 지정 하는 경우 .NET Framework 4.NET Framework 4 외부 API는 동일 하지만, 구현의 일부는 .NET Framework 4.NET Framework 4 system.xaml 어셈블리의 일반 xaml 구현에 기반 하 여 xaml 구문 분석의 많은 기술적 및 보고 측면을 개선 합니다.If you are targeting .NET Framework 4.NET Framework 4, the external API is the same, but parts of the implementation are built on the .NET Framework 4.NET Framework 4 general XAML implementation in the System.Xaml assembly, which improves many of the technical and reporting aspects of parsing XAML. .NET Framework 4.NET Framework 4참조로 system.xaml를 포함 하는 것과 같은 대상을 지정 하 고, 보고 된 예외와 같은 구현의 세부 정보를 system.xaml 정의 형식에서 가져올 수 있습니다.Targeting .NET Framework 4.NET Framework 4 necessarily entails including System.Xaml as a reference, and details of implementation such as the exceptions reported may come from System.Xaml defined types.

생성자

XamlReader()

XamlReader 클래스의 새 인스턴스를 초기화합니다.Initializes a new instance of the XamlReader class.

메서드

CancelAsync()

현재 보류 중인 비동기 로드 작업이 있으면 중단합니다.Aborts the current asynchronous load operation, if there is an asynchronous load operation pending.

Equals(Object)

지정된 개체가 현재 개체와 같은지 확인합니다.Determines whether the specified object is equal to the current object.

(다음에서 상속됨 Object)
GetHashCode()

기본 해시 함수로 작동합니다.Serves as the default hash function.

(다음에서 상속됨 Object)
GetType()

현재 인스턴스의 Type을 가져옵니다.Gets the Type of the current instance.

(다음에서 상속됨 Object)
GetWpfSchemaContext()

XamlSchemaContext에 대한 WPF 스키마 컨텍스트 설정을 나타내는 XamlReader 개체를 반환합니다.Returns a XamlSchemaContext object that represents the WPF schema context settings for a XamlReader.

Load(Stream)

지정된 Stream에서 XAML 입력을 읽고 해당 개체 트리의 루트인 Object를 반환합니다.Reads the XAML input in the specified Stream and returns an Object that is the root of the corresponding object tree.

Load(Stream, Boolean)
Load(Stream, ParserContext)

지정된 Stream에서 XAML 입력을 읽고 해당 개체 트리의 루트인 개체를 반환합니다.Reads the XAML input in the specified Stream and returns an object that is the root of the corresponding object tree.

Load(Stream, ParserContext, Boolean)
Load(XamlReader)

제공된 XamlReader에서 XAML 입력을 읽고 해당 개체 트리의 루트인 개체를 반환합니다.Reads the XAML input through a provided XamlReader and returns an object that is the root of the corresponding object tree.

Load(XmlReader)

지정된 XmlReader에서 XAML 입력을 읽고 해당 개체 트리의 루트인 개체를 반환합니다.Reads the XAML input in the specified XmlReader and returns an object that is the root of the corresponding object tree.

Load(XmlReader, Boolean)
LoadAsync(Stream)

지정된 Stream에서 XAML 입력을 읽고 해당 개체 트리의 루트를 반환합니다.Reads the XAML input in the specified Stream and returns the root of the corresponding object tree.

LoadAsync(Stream, Boolean)
LoadAsync(Stream, ParserContext)

지정된 Stream에서 XAML 입력을 읽고 해당 개체 트리의 루트를 반환합니다.Reads the XAML input in the specified Stream and returns the root of the corresponding object tree.

LoadAsync(Stream, ParserContext, Boolean)
LoadAsync(XmlReader)

지정된 XmlReader에서 XAML 입력을 읽고 해당 개체 트리의 루트를 반환합니다.Reads the XAML input in the specified XmlReader and returns the root of the corresponding object tree.

LoadAsync(XmlReader, Boolean)
MemberwiseClone()

현재 Object의 단순 복사본을 만듭니다.Creates a shallow copy of the current Object.

(다음에서 상속됨 Object)
Parse(String)

지정된 텍스트 문자열에서 XAML 입력을 읽고 지정된 태그의 루트에 해당하는 개체를 반환합니다.Reads the XAML input in the specified text string and returns an object that corresponds to the root of the specified markup.

Parse(String, Boolean)
Parse(String, ParserContext)

지정된 ParserContext를 사용하여 지정된 텍스트 문자열에서 XAML 태그를 읽고 지정된 태그의 루트에 해당하는 개체를 반환합니다.Reads the XAML markup in the specified text string (using a specified ParserContext) and returns an object that corresponds to the root of the specified markup.

Parse(String, ParserContext, Boolean)
ToString()

현재 개체를 나타내는 문자열을 반환합니다.Returns a string that represents the current object.

(다음에서 상속됨 Object)

이벤트

LoadCompleted

비동기 로드 작업이 완료되면 발생합니다.Occurs when an asynchronous load operation completes.

적용 대상

추가 정보