Типы, перенесенные из WPF в System.Xaml

В платформе .NET Framework версий 3.0 и 3.5 как Windows Presentation Foundation (WPF), так и Windows Workflow Foundation включали реализацию языка XAML. Многие из открытых типов, которые обеспечивают расширение для реализации XAML в WPF, существовали в сборках WindowsBase PresentationCore и PresentationFramework. Аналогично, открытые типы, обеспечивающие расширение для XAML Windows Workflow Foundation, существовали в сборке System.Workflow.ComponentModel. В .NET Framework 4 некоторые типы , связанные с XAML, перенесены в сборку System.Xaml. Общая реализация служб языка XAML в .NET Framework поддерживает многие сценарии расширения XAML, которые первоначально определялись реализацией XAML конкретной платформы, а теперь в целом поддерживаются в .NET Framework 4. В этой статье перечислены перенесенные типы и обсуждаются вопросы, относящиеся к миграции.

Сборки и пространства имен

В платформе .NET Framework версий 3.0 и 3.5 типы, реализованные 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, поддерживает перенаправление типов в 4 версии сборки WPF.

Типы поддержки 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.0 и 3.5 класс 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.0 и 3.5 для WPF предоставляли ряд служб, доступных для реализаций MarkupExtension и TypeConverter, для поддержки использования типа или свойства в XAML. Вот эти службы.

Примечание.

Другая служба из .NET Framework 3.5, связанная с расширениями разметки, — это интерфейс IReceiveMarkupExtension. IReceiveMarkupExtensionне был перенесен и помечен [Obsolete] для платформы .NET Framework 4. Сценарии, в которых ранее использовался IReceiveMarkupExtension , следует применять обратные вызовы XamlSetMarkupExtensionAttribute с атрибутами. AcceptedMarkupExtensionExpressionTypeAttribute также помечен как [Obsolete].

Возможности языка XAML

Некоторые возможности и компоненты языка XAML для WPF были доступны ранее в сборке PresentationFramework. Они были реализованы как подкласс 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. Например, x:TypeArguments — это атрибут, который обрабатывается средствами чтения и записи XAML из реализаций System.XAML. Как можно заметить, в потоке узлов XAML предусмотрена обработка в контексте схемы XAML по умолчанию (на основе CLR), представление системы типов XAML и т. д. Дополнительные сведения о справочной документации по XAML см. в разделе Службы XAML.

ValueSerializer и классы поддержки

Класс ValueSerializer поддерживает преобразование типов в строку, в частности для сериализации XAML, для которой может потребоваться несколько режимов или узлов в выходных данных. В платформе .NET Framework версий 3.0 и 3.5 ValueSerializer для WPF находился в сборке WindowsBase. В .NET Framework 4 класс ValueSerializer находится в System.Xaml и предназначен для любого сценария расширения XAML, а не только для сценариев на основе WPF. IValueSerializerContext (поддерживающая служба) и DateTimeValueSerializer (конкретный подкласс) также перенесены в сборку System.Xaml.

XAML в WPF содержал несколько атрибутов, которые можно было применять к типам CLR, чтобы указать что-то об их поведении в XAML. Ниже приведен список атрибутов, которые существуют в сборках WPF в платформах .NET Framework 3.5 и .NET Framework 3.0. В .NET Framework 4 они перенесены в System.Xaml.

Различные классы

В платформе .NET Framework версий 3.0 и 3.5 интерфейс IComponentConnector размещался в сборке WindowsBase, но в версии .NET Framework 4 он размещен в System.Xaml. IComponentConnector в основном предназначен для поддержки инструментария и компиляторов разметки XAML.

В платформе .NET Framework версий 3.0 и 3.5 интерфейс INameScope размещался в сборке WindowsBase, но в версии .NET Framework 4 он размещен в System.Xaml. INameScope определяет базовые операции для пространства имен XAML.

Следующие классы существуют в сборках WPF и в сборке System.Xaml в .NET Framework 4.

XamlReader

XamlWriter

XamlParseException

Реализация WPF находится в пространстве имен System.Windows.Markup и в сборке PresentationFramework. Реализация System.Xaml находится в пространстве имен System.Xaml . Если вы используете типы WPF или создаете производные типы от типов WPF, следует использовать реализации XamlReader и XamlWriter WPF вместо реализаций System.Xaml. Подробнее см. в разделе "Замечания" в System.Windows.Markup.XamlReader и System.Windows.Markup.XamlWriter.

Если вы указываете ссылки на сборки WPF и System.Xaml и используете операторы include для пространств имен System.Windows.Markup и System.Xaml , вам может понадобиться полностью определить вызовы этих API, чтобы однозначно разрешить эти типы.