XAMLServices 클래스 및 기본 XAML 읽기 또는 쓰기
XamlServices .NET에서 제공하는 클래스로, XAML 노드 스트림 또는 해당 노드에서 가져온 XAML 형식 시스템 정보에 대한 특정 액세스가 필요하지 않은 XAML 시나리오를 해결하는 데 사용할 수 있습니다.
XamlServices API는 XAML 로드 경로를 지원하기 위한 Load
또는 Parse
, XAML 저장 경로를 지원하는 Save
, 부하 경로를 조인하고 경로를 저장하는 기술을 제공하는 Transform
다음과 같이 요약할 수 있습니다.
Transform
사용하여 한 XAML 스키마에서 다른 스키마로 변경할 수 있습니다. 이 항목에서는 이러한 각 API 분류를 요약하고 특정 메서드 오버로드 간의 차이점을 설명합니다.
부하
Load 다양한 오버로드는 로드 경로에 대한 전체 논리를 구현합니다. 로드 경로는 어떤 형태로든 XAML을 사용하고 XAML 노드 스트림을 출력합니다. 이러한 로드 경로의 대부분은 인코딩된 XML 텍스트 파일 형식으로 XAML을 사용합니다. 그러나 일반 스트림을 로드하거나 다른 XamlReader 구현에 이미 포함된 미리 로드된 XAML 원본을 로드할 수도 있습니다.
대부분의 시나리오에서 가장 간단한 오버로드는 Load(String). 이 오버로드에는 로드할 XAML이 포함된 텍스트 파일의 이름인 fileName
매개 변수가 있습니다. 이는 이전에 상태 또는 데이터를 로컬 컴퓨터에 직렬화한 완전 신뢰 애플리케이션과 같은 애플리케이션 시나리오에 적합합니다. 이는 애플리케이션 모델을 정의하고 애플리케이션 동작, 시작 UI 또는 XAML을 사용하는 다른 프레임워크 정의 기능을 정의하는 표준 파일 중 하나를 로드하려는 프레임워크에도 유용합니다.
Load(Stream) 비슷한 시나리오가 있습니다.
Stream 파일 시스템에 액세스할 수 있는 다른 System.IO API의 빈번한 출력이므로 사용자가 로드할 파일을 선택해야 하는 경우 이 오버로드가 유용할 수 있습니다. 또는 비동기 다운로드 또는 스트림을 제공하는 다른 네트워크 기술을 통해 XAML 원본에 액세스할 수 있습니다. (스트림 또는 사용자가 선택한 원본에서 로드하면 보안에 영향을 미칠 수 있습니다. 자세한 내용은 XAML 보안 고려 사항
Load(TextReader) 및 Load(XmlReader) 이전 버전의 .NET 형식 판독기에서 사용하는 오버로드입니다. 이러한 오버로드를 사용하려면 이미 판독기 인스턴스를 만들고 해당 Create
API를 사용하여 관련 양식(텍스트 또는 XML)에서 XAML을 로드했어야 합니다. 다른 판독기에서 레코드 포인터를 이미 이동했거나 다른 작업을 수행한 경우 이는 중요하지 않습니다.
Load 로드 경로 논리는 항상 루트에서 전체 XAML 입력을 처리합니다. 다음 시나리오에서는 이러한 오버로드를 사용할 수 있습니다.
기존 XML 관련 텍스트 편집기에서 간단한 XAML 편집 기능을 제공하는 디자인 화면입니다.
전용 판독기를 사용하여 파일 또는 스트림을 여는 핵심 System.IO 시나리오의 변형입니다. 논리는 XAML로 로드하기 전에 콘텐츠의 기본적인 검사 또는 처리를 수행합니다.
파일 또는 스트림을 로드하거나 판독기 API를 사용하여 로드하여 XAML 입력을 래핑하는 XmlReader, TextReader또는 XamlReader 로드할 수 있습니다.
내부적으로 위의 각 오버로드는 궁극적으로 Load(XmlReader)전달된 XmlReader 새 XamlXmlReader만드는 데 사용됩니다.
고급 시나리오를 제공하는 Load
서명은 Load(XamlReader). 다음 사례 중 하나에 이 서명을 사용할 수 있습니다.
XamlReader고유한 구현을 정의했습니다.
기본 설정과 다른 XamlReader 설정을 지정해야 합니다.
기본 설정이 아닌 설정의 예:
AllowProtectedMembersOnRoot
BaseUri
IgnoreUidsOnPropertyElements
LocalAssembly
ValuesMustBeString.
XamlServices 기본 판독기는 XamlXmlReader. 고유한 XamlXmlReader 설정으로 제공하는 경우 기본이 아닌 XamlXmlReaderSettings설정하는 속성은 다음과 같습니다.
CloseInput
SkipXmlCompatibilityProcessing
XmlLang
XmlSpacePreserve
구문 분석
Parse XAML 입력에서 XAML 노드 스트림을 만드는 로드 경로 API이므로 Load
같습니다. 그러나 이 경우 XAML 입력은 로드할 모든 XAML을 포함하는 문자열로 직접 제공됩니다.
Parse 프레임워크 시나리오보다 애플리케이션 시나리오에 더 적합한 간단한 방법입니다. 자세한 내용은 Parse참조하세요.
Parse 내부적으로 StringReader 포함하는 래핑된 Load(XmlReader) 호출입니다.
구해내다
다양한 오버로드의 Save 저장 경로를 구현합니다. 모든 Save 메서드는 모두 개체 그래프를 입력으로 사용하고 출력을 스트림, 파일 또는 XmlWriter/TextWriter 인스턴스로 생성합니다.
입력 개체는 일부 개체 표현의 루트 개체여야 합니다. 비즈니스 개체의 단일 루트, UI 시나리오의 페이지에 대한 개체 트리의 루트, 디자인 도구의 작업 편집 화면 또는 시나리오에 적합한 다른 루트 개체 개념일 수 있습니다.
많은 시나리오에서 저장하는 개체 트리는 Load 또는 프레임워크/애플리케이션 모델에서 구현된 다른 API를 사용하여 XAML을 로드한 원래 작업과 관련이 있습니다. 상태 변경, 애플리케이션이 사용자로부터 런타임 설정을 캡처한 위치 변경, 애플리케이션이 XAML 디자인 화면이므로 XAML 변경 등으로 인해 개체 트리에 캡처된 차이점이 있을 수 있습니다. 변경 내용 유무에 관계없이 먼저 태그에서 XAML을 로드한 다음 다시 저장하고 두 XAML 태그 양식을 비교하는 개념을 XAML의 왕복 표현이라고도 합니다.
태그 형식으로 설정된 복잡한 개체를 저장하고 직렬화하는 문제는 정보 손실이 없는 전체 표현과 XAML을 사람이 읽을 수 없게 만드는 자세한 정보 사이의 균형을 맞추는 것입니다. 또한 XAML에 대한 다른 고객은 해당 잔액을 설정하는 방법에 대해 서로 다른 정의 또는 기대치를 가질 수 있습니다. Save API는 해당 균형에 대한 하나의 정의를 나타냅니다. Save API는 사용 가능한 XAML 스키마 컨텍스트와 XamlType, XamlMember및 기타 XAML 내장 함수 및 XAML 형식 시스템 개념의 기본 CLR 기반 특성을 사용하여 특정 XAML 노드 스트림 구문을 태그에 다시 저장할 때 최적화할 수 있는 위치를 결정합니다. 예를 들어 XamlServices 저장 경로는 CLR 기반 기본 XAML 스키마 컨텍스트를 사용하여 개체에 대한 XamlType 확인하고, XamlType.ContentProperty확인한 다음, 개체의 XAML 콘텐츠에 속성을 쓸 때 속성 요소 태그를 생략할 수 있습니다.
변압하다
Transform 로드 경로와 저장 경로를 단일 작업으로 연결하여 XAML을 변환하거나 변환합니다. 다른 스키마 컨텍스트 또는 다른 지원 형식 시스템을 XamlReader 및 XamlWriter사용할 수 있습니다. 이는 결과 XAML이 변환되는 방식에 영향을 줍니다. 이는 광범위한 변환 작업에 적합합니다.
XAML 노드 스트림의 각 노드를 검사하는 작업의 경우 일반적으로 Transform사용하지 않습니다. 대신 사용자 고유의 부하 경로 저장 경로 작업 계열을 정의하고 고유한 논리를 교차해야 합니다. 경로 중 하나에서 고유한 노드 루프 주위에 XAML 판독기/XAML 기록기 쌍을 사용합니다. 예를 들어 XamlXmlReader 사용하여 초기 XAML을 로드하고 연속 Read 호출을 사용하여 노드로 한 단계씩 실행합니다. XAML 노드 스트림 수준에서 작동하면 이제 개별 노드(형식, 멤버, 다른 노드)를 조정하여 변환을 적용하거나 노드를 as-is그대로 둘 수 있습니다. 그런 다음 노드를 XamlObjectWriter 관련 Write
API로 보내고 개체를 작성합니다. 자세한 내용은 XAML 노드 스트림 구조 및 개념이해를 참조하세요.
참고 항목
- XamlObjectWriter
- XamlServices
- XAML Services
.NET Desktop feedback