다음을 통해 공유


XamlReader 클래스

정의

WPF 기본 XAML 판독기 및 연결된 XAML 개체 기록기를 사용하여 XAML 입력을 읽고 개체 그래프를 만듭니다.

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

예제

다음 예에서는 클래스를 Button 사용하여 를 문자열로 변환합니다 XamlWriter . 그런 다음 문자열은 클래스의 정적 메서드를 Button 사용하여 에 다시 로드됩니다XamlReader.Load

// 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 instance 사용해야 합니다.

메서드의 Load 출력은 만든 개체 트리 또는 개체 그래프의 루트 개체를 나타내는 단일 개체입니다. 개체에서 만든 그래프 XamlReader 일반적으로 런타임에 WPF 애플리케이션의 기존 개체 트리에 추가 됩니다. 그렇지 않은 경우 새 개체 그래프 WPF 애플리케이션 모델의 목적에 대 한 연결이 끊어진 것으로 간주 됩니다. 즉, 렌더링 하지 않습니다 하 고 적용할 수 없습니다 액세스를 사용 하 여 개체 트리 기법으로 WPF 애플리케이션의 기본 개체 트리 (예를 들어 Api FindName, LogicalTreeHelper, VisualTreeHelper). 개체 트리 개념에 대한 자세한 내용은 WPF의 트리를 참조하세요.

XamlReader 에서는 다음과 같은 기본 시나리오를 지원합니다.

  • 복제/개체 팩터리: 추가 메커니즘이 없으면 참조 형식은 일반적으로 WPF 개체 트리에서 둘 이상의 위치에 포함될 수 없습니다. (WPF에서 공유 또는 다시 사용을 지원하는 추가 메커니즘의 예로는 를 기반으로 Freezable하는 개체 또는 에서 항목ResourceDictionary으로 참조되는 것과 같이 Brush 일반적으로 공유 가능한 개체에 대한 지원이 포함됩니다.) 개체 트리에 이미 있는 개체를 복제하는 한 가지 방법은 를 사용하여 XamlWriter.Save개체를 serialize하는 것입니다. 그런 다음, 스트림 또는 XmlReader 중간자를 사용하여 에 대한 호출Load에 대한 입력으로 직렬화된 문자열을 사용합니다.

  • Just-In-Time 정보를 기반으로 개체 생성: 종종 지연 바인딩 또는 사용자가 제공한 입력이 기존 개체의 상태를 변경하는 다른 방법이 있습니다. 예를 들어 동일한 값을 사용하여 둘 이상의 속성을 설정하거나 데이터 바인딩을 사용할 수 있습니다. 그러나 만들 개체의 형식이 런타임 또는 사용자 상호 작용에서만 결정 가능한 시나리오가 있는 경우 입력을 위해 Load 문자열을 작성하여 이러한 개체를 만드는 것이 유용한 기술인 경우가 많습니다.

  • 기존 리소스 기술을 사용 하 여:는 Stream 형식에서 자주 사용 됩니다 다른 프레임 워크 또는 기술 애플리케이션 경계를 넘어 데이터 나 개체를 전송 하는 것에 대 한 또는 이와 유사한 상황에 대 한 합니다. 사용할 수는 Stream 저장소나 결국 애플리케이션의 일부로 개체를 만드는 데 사용 하는 XAML 형식의 데이터를 가져오는 방법입니다.

  • 고정 문서: 애플리케이션에서 WPF 애플리케이션 개체 트리를 UI에 포함 하기 위해 로컬 또는 다운로드 한 XPS 문서를 로드할 수 있습니다.

참고

이 설명서에서는 개체 트리가 아닌 개체 그래프를 설명하는 경우도 있습니다. 엄격한 부모-자식 관계를 항상 없으므로 런타임 WPF 애플리케이션의 런타임 개체 관계에서 개체 그래프를 보다 광범위 하 게 해당 용어는 합니다. 그러나 WPF에는 두 개의 서로 다른 트리 개념화 API(LogicalTreeHelper, VisualTreeHelper)가 포함되어 있기 때문에 트리 은유는 여전히 WPF의 대부분의 실제 사례에 적절하게 적용됩니다. 그러나 XAML 언어 관점에서 개체 그래프는 XAML 언어 자체가 관계를 트리 구조로 다시 가져오는 도우미 클래스 방법론을 반드시 지정하지 않기 때문에 XAML에서 개체를 만드는 방법을 생각하는 가장 좋은 방법입니다.

코드 액세스 보안, 느슨한 XAML 및 XamlReader

XAML은 개체 인스턴스화 및 실행을 직접적으로 나타내는 태그 언어입니다. 따라서 XAML에서 만든 요소에는 생성된 해당 코드가 수행하는 것과 마찬가지로 시스템 리소스(예: 네트워크 액세스, 파일 시스템 IO)와 상호 작용하는 동일한 기능이 있습니다.

WPF는 .NET 보안 프레임워크 CAS(코드 액세스 보안)를 지원합니다. 즉, 인터넷 영역에서 실행되는 WPF 콘텐츠는 실행 권한이 줄어듭니다. "느슨한 XAML"(XAML 뷰어에 의해 로드 시 해석되는 비컴파일 XAML 페이지) 및 XBAP(XAML 브라우저 애플리케이션)는 일반적으로 이 인터넷 영역에서 실행되며 동일한 권한 집합을 사용합니다. 하지만 완전히 신뢰할 수 있는 애플리케이션으로 로드된 XAML은 시스템 리소스에 대해 호스팅 애플리케이션과 동일한 액세스 권한을 가집니다. 자세한 내용은 WPF 부분 신뢰 보안을 참조하세요.

에 대 한 이러한 문 미치는 XamlReader 애플리케이션 디자인 로드 하려는 XAML에 대 한 신뢰 결정을 내려야 하는 합니다. 신뢰할 수 없는 XAML을 로드하는 경우 결과 개체 그래프를 로드하는 방법에 대한 고유한 샌드박싱 기술을 구현하는 것이 좋습니다.

XamlReader 는 부분 신뢰 코드로도 호출할 수 있습니다. 이 경우 코드 액세스 보안에 인터넷 보안 영역이 적용됩니다. 로드된 XAML의 항목이 인터넷 보안 영역에서 유효하지 않으면 XAML 구문 분석 예외가 throw됩니다. 실행의 일부인 플랫폼 수준에서 XamlReader 부분 신뢰인 XBAP 및 기타 사례에서 명시적 부분 신뢰 호출과 동일한 예외 동작을 가져옵니다.

WPF XAML, XAML 판독기/작성기 및 XAML 언어 버전 관리

XAML2009 x:Reference 및 x:FactoryMethod와 같은 언어 기능을 포함합니다. 또는 ParseLoad 서명을 사용하여 이러한 기능을 사용하는 XAML을 로드할 수 있습니다. 그러나 이러한 언어 기능은 태그를 컴파일해야 하는 XAML에 대 한 지원 되지 않습니다 (에 대 한 XAML 같은 페이지 는 WPF 애플리케이션 또는 빌드 작업에서 태그 컴파일 작업을 포함 하는 모든 XAML에서 빌드 작업).

WPF 유형 및 WPF 기술은 일반적으로 WPF 내부 액세스에 의존하는 개념을 지원합니다. instance 경우 WPF가 종속성 속성을 구현하는 방법은 효율적인 형식 멤버 조회를 위한 내부 기술에 의존합니다. 이러한 내부 액세스는 네임스페이스 및 PresentationFramework 어셈블리에서 System.Windows.Markup 제공된 XAML 읽기 및 쓰기 API에 XamlWriterXamlReader 의해 활성화됩니다. 그러나 System.Xaml 어셈블리의 하위 수준 XAML 판독기 및 XAML 작성기(를 System.Xaml.XamlWriter기반으로 하는 클래스)는 WPF 내부 항목에 System.Xaml.XamlReader액세스할 수 없습니다. System.Xaml에서 WPF 관련 어셈블리로의 종속성은 없습니다. WPF 내부에 액세스할 수 없으면 System.Xaml 판독기 및 작성기는 WPF 형식에 따라 모든 WPF 형식 또는 형식을 올바르게 로드하거나 저장할 수 없습니다. 특히 System.Xaml 판독기 및 작성기는 WPF 종속성 속성 백업 속성 저장소와 같은 개념이나 WPF에서 스타일, 리소스 사전 및 템플릿을 사용하는 방법에 대한 모든 세부 사항을 이해하지 못합니다. 따라서 다음을 선택할 수 있습니다.

  • WPF 형식을 로드하거나 BAML 양식에서 XAML을 사용하는 경우 PresentationFramework XAML 판독기 및 XAML 작성기를 사용합니다.

  • WPF 형식 또는 XAML의 BAML 형식에 의존하지 않고 해당 프레임워크와 관련된 이유로 다른 특정 기술의 XAML 판독기 또는 XAML 작성기 구현을 사용하지 않는 경우 System.Xaml XAML 판독기 및 XAML 작성기를 사용합니다.

.NET 4의 System.Xaml 지원 구현

XamlReader 는 WPF 프레임워크 수준 XAML 파서에 대한 호출 가능한 API 표면입니다. 동일한 기본 XAML 파서는 .NET Framework 3.0 및 .NET Framework 3.5를 대상으로 하는 WPF 애플리케이션에 대한 런타임 XAML 로드 및 구문 분석도 수행합니다.

.NET Framework 4를 대상으로 하는 경우 외부 API는 동일하지만 구현의 일부는 System.Xaml 어셈블리의 .NET Framework 4 일반 XAML 구현을 기반으로 구축되어 XAML 구문 분석의 많은 기술 및 보고 측면을 개선합니다. .NET Framework 4를 대상으로 지정하려면 반드시 System.Xaml을 참조로 포함해야 하며 보고된 예외와 같은 구현의 세부 정보는 System.Xaml 정의 형식에서 발생할 수 있습니다.

생성자

XamlReader()

XamlReader 클래스의 새 인스턴스를 초기화합니다.

메서드

CancelAsync()

현재 보류 중인 비동기 로드 작업이 있으면 중단합니다.

Equals(Object)

지정된 개체가 현재 개체와 같은지 확인합니다.

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

기본 해시 함수로 작동합니다.

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

현재 인스턴스의 Type을 가져옵니다.

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

XamlSchemaContext에 대한 WPF 스키마 컨텍스트 설정을 나타내는 XamlReader 개체를 반환합니다.

Load(Stream)

지정된 Stream에서 XAML 입력을 읽고 해당 개체 트리의 루트인 Object를 반환합니다.

Load(Stream, Boolean)

WPF 기본 XAML 판독기 및 연결된 XAML 개체 기록기를 사용하여 XAML 입력을 읽고 개체 그래프를 만듭니다.

Load(Stream, ParserContext)

지정된 Stream에서 XAML 입력을 읽고 해당 개체 트리의 루트인 개체를 반환합니다.

Load(Stream, ParserContext, Boolean)

WPF 기본 XAML 판독기 및 연결된 XAML 개체 기록기를 사용하여 XAML 입력을 읽고 개체 그래프를 만듭니다.

Load(XamlReader)

제공된 XamlReader에서 XAML 입력을 읽고 해당 개체 트리의 루트인 개체를 반환합니다.

Load(XmlReader)

지정된 XmlReader에서 XAML 입력을 읽고 해당 개체 트리의 루트인 개체를 반환합니다.

Load(XmlReader, Boolean)

WPF 기본 XAML 판독기 및 연결된 XAML 개체 기록기를 사용하여 XAML 입력을 읽고 개체 그래프를 만듭니다.

LoadAsync(Stream)

지정된 Stream에서 XAML 입력을 읽고 해당 개체 트리의 루트를 반환합니다.

LoadAsync(Stream, Boolean)

WPF 기본 XAML 판독기 및 연결된 XAML 개체 기록기를 사용하여 XAML 입력을 읽고 개체 그래프를 만듭니다.

LoadAsync(Stream, ParserContext)

지정된 Stream에서 XAML 입력을 읽고 해당 개체 트리의 루트를 반환합니다.

LoadAsync(Stream, ParserContext, Boolean)

WPF 기본 XAML 판독기 및 연결된 XAML 개체 기록기를 사용하여 XAML 입력을 읽고 개체 그래프를 만듭니다.

LoadAsync(XmlReader)

지정된 XmlReader에서 XAML 입력을 읽고 해당 개체 트리의 루트를 반환합니다.

LoadAsync(XmlReader, Boolean)

WPF 기본 XAML 판독기 및 연결된 XAML 개체 기록기를 사용하여 XAML 입력을 읽고 개체 그래프를 만듭니다.

MemberwiseClone()

현재 Object의 단순 복사본을 만듭니다.

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

지정된 텍스트 문자열에서 XAML 입력을 읽고 지정된 태그의 루트에 해당하는 개체를 반환합니다.

Parse(String, Boolean)

WPF 기본 XAML 판독기 및 연결된 XAML 개체 기록기를 사용하여 XAML 입력을 읽고 개체 그래프를 만듭니다.

Parse(String, ParserContext)

지정된 ParserContext를 사용하여 지정된 텍스트 문자열에서 XAML 태그를 읽고 지정된 태그의 루트에 해당하는 개체를 반환합니다.

Parse(String, ParserContext, Boolean)

WPF 기본 XAML 판독기 및 연결된 XAML 개체 기록기를 사용하여 XAML 입력을 읽고 개체 그래프를 만듭니다.

ToString()

현재 개체를 나타내는 문자열을 반환합니다.

(다음에서 상속됨 Object)

이벤트

LoadCompleted

비동기 로드 작업이 완료되면 발생합니다.

적용 대상

추가 정보