Типы, перенесенные из WPF в System.Xaml
В .NET Framework 3.5 и .NET Framework 3.0 windows Presentation Foundation (WPF) и Windows Workflow Foundation включали реализацию языка XAML. Многие общедоступные типы, обеспечивающие расширяемость для реализации XAML WPF, существуют в сборках WindowsBase, PresentationCore и PresentationFramework. Аналогичным образом в сборке System.Workflow.ComponentModel существуют общедоступные типы, обеспечивающие расширяемость для XAML Windows Workflow Foundation. В .NET Framework 4 некоторые типы, связанные с XAML, были перенесены в сборку System.Xaml. Общая реализация .NET Framework языковых служб XAML позволяет использовать множество сценариев расширяемости XAML, которые изначально определены реализацией XAML конкретной платформы, но теперь являются частью общей поддержки языка XAML .NET Framework 4. В этой статье перечислены типы, которые были перенесены и рассматриваются проблемы, связанные с миграцией.
Сборки и пространства имен
В .NET Framework 3.5 и .NET Framework 3.0 типы, реализованные WPF для поддержки XAML, обычно находились в пространстве имен System.Windows.Markup. Большинство этих типов находились в сборке WindowsBase.
В .NET Framework 4 существует новое пространство имен System.Xaml и новая сборка System.Xaml. Многие типы, которые изначально были реализованы для XAML WPF, теперь предоставляются как точки расширяемости или службы для любой реализации XAML. В рамках того, чтобы сделать их доступными для более общих сценариев, типы перенаправляются из исходной сборки WPF в сборку System.Xaml. Это позволяет сценариям расширения XAML без необходимости включать сборки других платформ (например, WPF и Windows Workflow Foundation).
Для перенесенных типов большинство типов остаются в пространстве имен System.Windows.Markup. Это было сделано частично, чтобы избежать нарушения сопоставлений пространств имен CLR в существующих реализациях в каждом файле. В результате пространство имен System.Windows.Markup в .NET Framework 4 содержит смесь общих типов поддержки языка XAML (из сборки System.Xaml) и типов, относящихся к реализации XAML WPF (из WindowsBase и других сборок WPF). Любой тип, перенесенный в System.Xaml, но существующий ранее в сборке WPF, поддерживает перенаправление типов в сборке WPF версии 4.
Типы поддержки XAML рабочего процесса
Windows Workflow Foundation также предоставил типы поддержки XAML, и во многих случаях они имели идентичные короткие имена эквиваленту WPF. Ниже приведен список типов поддержки XAML в Windows Workflow Foundation:
Эти типы поддержки по-прежнему существуют в сборках Windows Workflow Foundation для .NET Framework 4 и по-прежнему могут использоваться для определенных приложений Windows Workflow Foundation; Однако они не должны ссылаться на приложения или платформы, которые не используют Windows Workflow Foundation.
MarkupExtension
В .NET Framework 3.5 и .NET Framework 3.0 класс MarkupExtension для WPF был в сборке WindowsBase. Параллельный класс для Windows Workflow Foundation MarkupExtensionсуществовал в сборке System.Workflow.ComponentModel. В .NET Framework 4 класс MarkupExtension переносится в сборку System.Xaml. В .NET Framework 4 MarkupExtension предназначен для любого сценария расширяемости XAML, использующего службы XAML .NET, а не только для тех, которые создаются на определенных платформах. По возможности определенные платформы или пользовательский код в платформе также должны создаваться на основе класса MarkupExtension для расширения XAML.
MarkupExtension, поддерживающие классы служб
.NET Framework 3.5 и .NET Framework 3.0 для WPF предоставили несколько служб, доступных для MarkupExtension реализации и TypeConverter для поддержки использования типов и свойств в XAML. Эти службы приведены ниже.
Заметка
Другая служба из .NET Framework 3.5, связанная с расширениями разметки, является интерфейсом IReceiveMarkupExtension.
IReceiveMarkupExtension не был перенесен и помечен [Obsolete]
для .NET Framework 4. Сценарии, которые ранее использовали IReceiveMarkupExtension, теперь должны использовать атрибутированные обратные вызовы XamlSetMarkupExtensionAttribute.
AcceptedMarkupExtensionExpressionTypeAttribute также помечается [Obsolete]
.
Функции языка XAML
В сборке PresentationFramework ранее существовали некоторые языковые возможности XAML и компоненты для WPF. Они были реализованы как подклассом MarkupExtension для раскрытия использования расширений разметки в XAML. В .NET Framework 4 они существуют в сборке System.Xaml, чтобы проекты, не содержащие сборки WPF, могли использовать эти функции на уровне языка XAML. WPF использует эти же реализации для приложений .NET Framework 4. Как и в других случаях, перечисленных в этом разделе, вспомогательные типы продолжают существовать в пространстве имен System.Windows.Markup, чтобы избежать нарушения предыдущих ссылок.
В следующей таблице содержится список классов поддержки функций XAML, определенных в System.Xaml.
Компонент языка XAML | Употребление |
---|---|
ArrayExtension | <x:Array ...> |
NullExtension | {x:Null} |
StaticExtension | {x:Static ...} |
TypeExtension | {x:Type ...} |
Хотя System.Xaml может не иметь определенных классов поддержки, общая логика обработки функций языка XAML теперь находится в System.Xaml и ее реализованных средствах чтения XAML и записи XAML. Например, x:TypeArguments
— это атрибут, обрабатываемый средствами чтения XAML и средствами записи XAML из реализаций System.Xaml; его можно отметить в потоке узлов XAML, имеет обработку в контексте схемы XAML по умолчанию (на основе СРЕДЫ CLR), имеет представление системы типов XAML и т. д. Для получения дополнительной информации о справочной документации по XAML см. XAML Services.
ValueSerializer и вспомогательные классы
Класс ValueSerializer поддерживает преобразование типов в строку, особенно для случаев сериализации XAML, в которых сериализация может потребовать нескольких режимов или узлов в выходных данных. В .NET Framework 3.5 и .NET Framework 3.0 ValueSerializer для WPF находился в сборке WindowsBase. В .NET Framework 4 класс ValueSerializer находится в System.Xaml и предназначен для любого сценария расширяемости XAML, а не только для тех, кто основан на WPF. IValueSerializerContext (поддерживаемая служба) и DateTimeValueSerializer (определенный подкласс) также переносятся в System.Xaml.
Атрибуты XAML-Related
WPF XAML включал несколько атрибутов, которые можно применять к типам CLR, чтобы указать на их поведение в XAML. Ниже приведен список атрибутов, которые существуют в сборках WPF в .NET Framework 3.5 и .NET Framework 3.0. Эти атрибуты переносятся в System.Xaml в .NET Framework 4.
Прочие классы
Интерфейс IComponentConnector существовал в WindowsBase в .NET Framework 3.5 и .NET Framework 3.0, но существует в System.Xaml в .NET Framework 4. IComponentConnector в основном предназначен для поддержки инструментов и компиляторов разметки XAML.
Интерфейс INameScope существовал в WindowsBase в .NET Framework 3.5 и .NET Framework 3.0, но существует в System.Xaml в .NET Framework 4. INameScope определяет основные операции для области имен XAML.
Классы, связанные с XAML, с общими именами, существующими в WPF и System.Xaml
Следующие классы существуют как в сборках WPF, так и в сборке System.Xaml в .NET Framework 4:
XamlReader
XamlWriter
XamlParseException
Реализация WPF находится в пространстве имен System.Windows.Markup и сборке PresentationFramework. Реализация System.Xaml находится в пространстве имен System.Xaml. Если вы используете типы WPF или производные от типов WPF, обычно следует использовать реализации WPF XamlReader и XamlWriter вместо реализаций System.Xaml. Дополнительные сведения см. в разделе "Примечания" в System.Windows.Markup.XamlReader и System.Windows.Markup.XamlWriter.
Если вы включаете ссылки как на сборки WPF, так и на System.Xaml, и также используете операторы include
для пространств имен System.Windows.Markup и System.Xaml, может потребоваться полностью квалифицировать вызовы к этим API для разрешения типов без неоднозначности.
.NET Desktop feedback