다음을 통해 공유


WPF에서 System.Xaml로 마이그레이션된 형식

.NET Framework 버전 3.5 및 .NET Framework 버전 3.0에서는 Windows Presentation Foundation (WPF) 및 Windows Workflow Foundation 모두에 XAML 언어 구현이 포함되었습니다. WindowsBase, PresentationCore 및 PresentationFramework 어셈블리에는 WPF XAML 구현에 대한 확장성을 제공하는 대부분의 공용 형식이 존재했습니다. 마찬가지로 System.Workflow.ComponentModel 어셈블리에는 Windows Workflow Foundation XAML에 대한 확장성을 제공하는 공용 형식이 존재했습니다. .NET Framework 버전 4에서 일부 XAML 관련 형식은 System.Xaml 어셈블리로 마이그레이션됩니다. XAML 언어 서비스의 공용 .NET Framework 구현을 통해 원래 특정 프레임워크의 XAML 구현에서 정의했지만 지금은 전체 .NET Framework 4 XAML 언어 지원의 일부인 많은 XAML 확장성 시나리오가 가능하게 되었습니다. 이 항목에서는 마이그레이션되는 형식을 나열하고 마이그레이션과 관련된 문제에 대해 설명합니다.

이 항목에는 다음 단원이 포함되어 있습니다.

  • 어셈블리 및 네임스페이스
  • MarkupExtension
  • MarkupExtension 지원 서비스 클래스
  • XAML 언어 기능
  • ValueSerializer 및 지원 클래스
  • XAML 관련 특성
  • 기타 클래스
  • WPF 및 System.Xaml에 존재하는 공유 이름을 가진 XAML 관련 클래스
  • 관련 항목

어셈블리 및 네임스페이스

.NET Framework 3.5 및 .NET Framework 3.0에서 XAML을 지원하기 위해 WPF가 구현한 형식은 일반적으로 System.Windows.Markup 네임스페이스에 있었습니다. 이러한 형식은 대부분 WindowsBase 어셈블리에 있었습니다.

.NET Framework 4에는 새 System.Xaml 네임스페이스와 새 System.Xaml 어셈블리가 있습니다. 원래 WPF XAML에 대해 구현되었던 대부분의 형식은 이제 모든 XAML 구현에 대한 확장성 지점 또는 서비스로 제공됩니다. 더 많은 일반 시나리오에 사용할 수 있도록 형식은 원래의 WPF 어셈블리에서 System.Xaml 어셈블리로 전달됩니다. 이렇게 하면 다른 프레임워크(예: WPF 및 Windows Workflow Foundation)의 어셈블리를 포함할 필요 없이 XAML 확장성 시나리오가 가능합니다.

마이그레이션된 형식의 경우 대부분의 형식은 System.Windows.Markup 네임스페이스에 남아 있습니다. 이는 부분적으로는 파일 단위의 기존 구현에서 CLR 네임스페이스 매핑이 해제되는 것을 방지하기 위한 것이었습니다. 결과적으로 .NET Framework 4의 System.Windows.Markup 네임스페이스는 System.Xaml 어셈블리에 있는 일반 XAML 언어 지원 형식과 WindowsBase 및 기타 WPF 어셈블리에 있는 WPF XAML 구현과 관련된 형식의 혼합을 포함합니다. System.Xaml에 마이그레이션되었지만 이전에 WPF 어셈블리에 있던 모든 형식은 버전 4의 WPF 어셈블리에서 형식 전달이 지원됩니다.

워크플로 XAML 지원 형식

Windows Workflow Foundation에서는 XAML 지원 형식도 제공되었으며 대부분의 경우 이러한 형식은 WPF의 경우와 동일한 짧은 이름을 가집니다. 다음 목록은 Windows Workflow Foundation XAML 지원 형식을 나열한 것입니다.

이러한 지원 형식은 .NET Framework 4용 Windows Workflow Foundation 어셈블리에 여전히 존재하며 특정 Windows Workflow Foundation 응용 프로그램에 계속 사용할 수 있지만 Windows Workflow Foundation을 사용하지 않는 응용 프로그램이나 프레임워크에서 참조하지 않아야 합니다.

MarkupExtension

.NET Framework 3.5 및 .NET Framework 3.0에서 WPF에 대한 MarkupExtension 클래스는 WindowsBase 어셈블리에 있었습니다. Windows Workflow Foundation에 대한 병렬 클래스인 MarkupExtension은 System.Workflow.ComponentModel 어셈블리에 있었습니다. .NET Framework 4에서 MarkupExtension 클래스는 System.Xaml 어셈블리로 마이그레이션됩니다. .NET Framework 4에서 MarkupExtension은 특정 프레임워크에서 작성되는 XAML 확장성 시나리오뿐만 아니라 .NET Framework XAML 서비스를 사용하는 모든 XAML 확장성 시나리오에 사용하기 위한 것입니다. 가능하면 특정 프레임워크나 프레임워크 내의 사용자 코드도 XAML 확장을 위한 MarkupExtension 클래스에서 작성해야 합니다.

MarkupExtension 지원 서비스 클래스

WPF용 .NET Framework 3.5 및 .NET Framework 3.0은 XAML에서의 형식/속성 사용을 지원하기 위해 MarkupExtension 구현자 및 TypeConverter 구현에서 사용할 수 있는 여러 서비스를 제공했습니다. 이러한 서비스는 다음과 같습니다.

참고참고

태그 확장과 관련된 .NET Framework 3.5의 또 다른 서비스는 IReceiveMarkupExtension 인터페이스입니다. IReceiveMarkupExtension은 마이그레이션되지 않았으며 .NET Framework 4의 경우 [Obsolete]로 표시됩니다.이전에 IReceiveMarkupExtension을 사용했던 시나리오에서는 이제 그 대신 XamlSetMarkupExtensionAttribute 특성 콜백을 사용해야 합니다.또한 AcceptedMarkupExtensionExpressionTypeAttribute도 [Obsolete]로 표시됩니다.

XAML 언어 기능

WPF에 대한 여러 XAML 언어 기능 및 구성 요소는 이전에 PresentationFramework 어셈블리에 존재했습니다. 이러한 기능과 구성 요소는 XAML 태그에서 태그 확장 사용을 노출하기 위해 MarkupExtension 서브클래스로 구현되었습니다. .NET Framework 4에서 이러한 기능과 구성 요소는 System.Xaml 어셈블리에 존재하므로 WPF 어셈블리를 포함하지 않는 프로젝트에서 이러한 XAML 언어 수준 기능을 사용할 수 있습니다. WPF는 .NET Framework 4 응용 프로그램에 이러한 동일한 구현을 사용합니다. 이 항목에 나열된 다른 경우와 마찬가지로 이전 참조 해제를 방지하기 위해 지원 형식은 계속해서 System.Windows.Markup 네임스페이스에 존재합니다.

다음 표에는 System.Xaml에 정의된 XAML 기능 지원 클래스가 나열되어 있습니다.

XAML 언어 기능

용도

ArrayExtension

<x:Array ...>

NullExtension

{x:Null}

StaticExtension

{x:Static ...}

TypeExtension

{x:Type ...}

System.Xaml에 특정 지원 클래스가 없을 수도 있지만 이제 XAML 언어의 언어 기능을 처리하는 일반 논리는 System.Xaml과 구현된 해당 XAML 판독기 및 XAML 작성기에 상주합니다. 예를 들어 x:TypeArguments는 System.Xaml 구현의 XAML 판독기 및 XAML 작성기에 의해 처리되고(XAML 노드 스트림에서 확인 가능) 기본 CLR 기반 XAML 스키마 컨텍스트에 처리를 포함하며 XAML 형식 시스템 표현을 갖고 있는 특성입니다. 따라서 모든 XAML 언어 수준 기능에 대한 참조 설명서는 WPF 기본 사항의 하위 항목으로 WPF 설명서 모음에 포함되는 것이 아니라 XAML 서비스의 하위 항목 및 .NET Framework 설명서 모음의 일반 영역으로 제공됩니다.

ValueSerializer 및 지원 클래스

ValueSerializer 클래스는 특히 출력에서 serialization에 여러 모드 또는 노드가 필요할 수 있는 XAML serialization 사례의 경우에 문자열로의 형식 변환을 지원합니다. .NET Framework 3.5 및 .NET Framework 3.0에서 WPF에 대한 ValueSerializer는 WindowsBase 어셈블리에 있었습니다. .NET Framework 4에서 ValueSerializer 클래스는 System.Xaml에 있으며 WPF에서 작성되는 XAML 확장성 시나리오뿐만 아니라 모든 XAML 확장성 시나리오에 사용하기 위한 것이었습니다. 또한 IValueSerializerContext(지원 서비스) 및 DateTimeValueSerializer(특정 서브클래스)는 System.Xaml로 마이그레이션됩니다.

XAML 관련 특성

WPF XAML에는 해당 XAML 동작에 대한 정보를 나타내기 위해 CLR 형식에 적용할 수 있는 여러 특성이 포함되었습니다. 다음 목록에는 .NET Framework 3.5 및 .NET Framework 3.0에서 WPF 어셈블리에 있었던 특성이 나열되어 있습니다. .NET Framework 4에서는 이러한 특성이 System.Xaml로 마이그레이션되었습니다.

기타 클래스

IComponentConnector 인터페이스는 .NET Framework 3.5 및 .NET Framework 3.0에서 WindowsBase에 존재했지만 .NET Framework 4에서는 System.Xaml에 존재합니다. IComponentConnector는 주로 도구 지원 및 XAML 태그 컴파일러에 사용하도록 되어 있습니다.

INameScope 인터페이스는 .NET Framework 3.5 및 .NET Framework 3.0에서 WindowsBase에 존재했지만 .NET Framework 4에서는 System.Xaml에 존재합니다. INameScope는 XAML 이름 범위에 대한 기본적인 작업을 정의합니다.

WPF 및 System.Xaml에 존재하는 공유 이름을 가진 XAML 관련 클래스

.NET Framework 4에서 WPF 어셈블리 및 System.Xaml 어셈블리 둘 다에 다음 클래스가 존재합니다.

XamlReader

XamlWriter

XamlParseException

WPF 구현은 System.Windows.Markup 네임스페이스 및 PresentationFramework 어셈블리에 있습니다. System.Xaml 구현은 System.Xaml 네임스페이스에 있습니다. WPF 형식을 사용하거나 WPF 형식에서 파생 형식을 만드는 경우 일반적으로 System.Xaml 구현 대신에 XamlReaderXamlWriter의 WPF 구현을 사용해야 합니다. 자세한 내용은 System.Windows.Markup.XamlReaderSystem.Windows.Markup.XamlWriter의 설명을 참조하십시오.

WPF 어셈블리 및 System.Xaml 둘 다에 대한 참조를 포함시킨 상태이고 또한 System.Windows.MarkupSystem.Xaml 네임스페이스 둘 다에 include 문을 사용하는 중이면 형식을 명확하게 확인하기 위해 이러한 API에 대한 호출을 정규화해야 할 수 있습니다.

참고 항목

개념

XAML 서비스