Tipos migrados do WPF para System. XAML

no .NET Framework 3,5 e .NET Framework 3,0, ambos Windows Presentation Foundation (WPF) e Windows Workflow Foundation incluíam uma implementação de linguagem XAML. Muitos dos tipos públicos que forneceram extensibilidade para a implementação XAML do WPF existiam nos assemblies WindowsBase, PresentationCore e PresentationFramework. da mesma forma, os tipos públicos que forneceram extensibilidade para Windows Workflow Foundation XAML existiam no assembly System. Workflow. ComponentModel. no .NET Framework 4, alguns dos tipos relacionados a XAML foram migrados para o assembly System. XAML. uma implementação comum de .NET Framework de serviços de linguagem xaml permite muitos cenários de extensibilidade xaml que foram originalmente definidos por uma implementação de xaml de uma estrutura específica, mas que agora fazem parte do suporte geral a quatro idiomas xaml .NET Framework. Este artigo lista os tipos que foram migrados e discute os problemas relacionados à migração.

Assemblies e namespaces

no .NET Framework 3,5 e .NET Framework 3,0, os tipos que o WPF implementou para oferecer suporte a XAML estavam geralmente no System.Windows.Markup namespace. A maioria desses tipos estava no assembly WindowsBase.

no .NET Framework 4, há um novo System.Xaml namespace e um novo assembly System. Xaml. Muitos dos tipos que foram originalmente implementados para o WPF XAML agora são fornecidos como pontos de extensibilidade ou serviços para qualquer implementação do XAML. Como parte de torná-los disponíveis para cenários mais gerais, os tipos são encaminhados de tipo de seu assembly original do WPF para o assembly System. XAML. isso permite cenários de extensibilidade XAML sem a necessidade de incluir os assemblies de outras estruturas (como WPF e Windows Workflow Foundation).

Para tipos migrados, a maioria dos tipos permanece no System.Windows.Markup namespace. Isso foi parcial para evitar a interrupção dos mapeamentos de namespace CLR em implementações existentes por arquivo. como resultado, o System.Windows.Markup namespace no .NET Framework 4 contém uma mistura de tipos gerais de suporte a idiomas xaml (do assembly System. XAML) e tipos que são específicos para a implementação XAML do wpf (de WindowsBase e outros assemblies do wpf). Qualquer tipo que foi migrado para System. XAML, mas existia anteriormente em um assembly do WPF, tem suporte de encaminhamento de tipo na versão 4 do assembly do WPF.

Tipos de suporte do fluxo de trabalho XAML

Windows Workflow Foundation também forneceu tipos de suporte XAML e, em muitos casos, eles tinham nomes curtos idênticos para um equivalente do WPF. a seguir está uma lista de tipos de suporte do Windows Workflow Foundation XAML:

esses tipos de suporte ainda existem nos assemblies de Windows Workflow Foundation para .NET Framework 4 e ainda podem ser usados para aplicativos Windows Workflow Foundation específicos; no entanto, eles não devem ser referenciados por aplicativos ou estruturas que não usam Windows Workflow Foundation.

MarkupExtension

no .NET Framework 3,5 e .NET Framework 3,0, a classe para o MarkupExtension WPF estava no assembly WindowsBase. uma classe paralela para Windows Workflow Foundation, MarkupExtension , existia no assembly System. Workflow. ComponentModel. no .NET Framework 4, a MarkupExtension classe é migrada para o assembly System. Xaml. no .NET Framework 4, MarkupExtension destina-se a qualquer cenário de extensibilidade xaml que usa serviços XAML .net, não apenas para aqueles que se baseiam em estruturas específicas. Quando possível, estruturas específicas ou código de usuário na estrutura também devem criar a classe para a MarkupExtension extensão XAML.

Classes de serviço de suporte MarkupExtension

.NET Framework 3,5 e .NET Framework 3,0 para o WPF forneciam vários serviços que estavam disponíveis para MarkupExtension implementadores e TypeConverter implementações para dar suporte ao uso de tipo/propriedade em XAML. Esses serviços são os seguintes:

Observação

outro serviço do .NET Framework 3,5 relacionado a extensões de marcação é a IReceiveMarkupExtension interface. IReceiveMarkupExtensionnão foi migrado e está marcado [Obsolete] para .NET Framework 4. Os cenários usados IReceiveMarkupExtension anteriormente devem usar XamlSetMarkupExtensionAttribute os retornos de chamada atribuídos. AcceptedMarkupExtensionExpressionTypeAttribute também está marcado [Obsolete] .

Recursos de linguagem XAML

Vários recursos e componentes de linguagem XAML para WPF existiam anteriormente no assembly PresentationFramework. Elas foram implementadas como uma MarkupExtension subclasse para expor usos de extensão de marcação na marcação XAML. no .NET Framework 4, eles existem no assembly System. Xaml para que os projetos que não incluem assemblies do WPF possam usar esses recursos de nível de linguagem Xaml. o WPF usa essas mesmas implementações para .NET Framework 4 aplicativos. Assim como nos outros casos listados neste tópico, os tipos de suporte continuam a existir no System.Windows.Markup namespace para evitar a quebra de referências anteriores.

A tabela a seguir contém uma lista das classes de suporte de recurso XAML que são definidas em System. XAML.

Recurso de linguagem XAML Uso
ArrayExtension <x:Array ...>
NullExtension {x:Null}
StaticExtension {x:Static ...}
TypeExtension {x:Type ...}

Embora System. XAML possa não ter classes de suporte específicas, a lógica geral para o processamento de recursos de linguagem para a linguagem XAML agora reside em System. XAML e seus leitores XAML e gravadores XAML. Por exemplo, x:TypeArguments é um atributo que é processado por leitores XAML e gravadores de XAML de implementações de System. XAML; ele pode ser observado no fluxo do nó XAML, manipulando no contexto de esquema XAML padrão (baseado em CLR), tem uma representação de sistema de tipo XAML e assim por diante. Para obter mais informações sobre a documentação de referência para XAML, consulte serviços XAML.

ValueSerializer não e classes de suporte

A ValueSerializer classe dá suporte à conversão de tipo para uma cadeia de caracteres, particularmente para casos de SERIALIZAÇÃO XAML em que a serialização pode exigir vários modos ou nós na saída. no .NET Framework 3,5 e .NET Framework 3,0, o ValueSerializer para WPF estava no assembly WindowsBase. no .NET Framework 4, a classe está em System. Xaml e destina-se a ValueSerializer qualquer cenário de extensibilidade Xaml, não apenas para aqueles que se baseiam no WPF. IValueSerializerContext (um serviço de suporte) e DateTimeValueSerializer (uma subclasse específica) também são migrados para System. XAML.

O WPF XAML incluía vários atributos que podem ser aplicados a tipos CLR para indicar algo sobre seu comportamento XAML. a seguir está uma lista dos atributos que existiam em assemblies do WPF no .NET Framework 3,5 e .NET Framework 3,0. esses atributos são migrados para System. Xaml no .NET Framework 4.

Classes diversas

a IComponentConnector interface existia em WindowsBase no .NET Framework 3,5 e .NET Framework 3,0, mas existe em System. Xaml no .NET Framework 4. IComponentConnector destina-se principalmente a ferramentas de suporte e compiladores de marcação XAML.

a INameScope interface existia em WindowsBase no .NET Framework 3,5 e .NET Framework 3,0, mas existe em System. Xaml no .NET Framework 4. INameScope define operações básicas para um namescope XAML.

as classes a seguir existem nos assemblies do WPF e no assembly System. Xaml no .NET Framework 4:

XamlReader

XamlWriter

XamlParseException

A implementação do WPF é encontrada no namespace e no System.Windows.Markup assembly PresentationFramework. A implementação de System. XAML é encontrada no System.Xaml namespace. Se você estiver usando tipos do WPF ou estiver derivando de tipos do WPF, normalmente deverá usar as implementações do WPF de XamlReader e XamlWriter em vez das implementações de System. XAML. Para obter mais informações, consulte comentários em System.Windows.Markup.XamlReader e System.Windows.Markup.XamlWriter .

Se você estiver incluindo referências a assemblies do WPF e System. XAML, e também estiver usando include instruções para os System.Windows.Markup namespaces e System.Xaml , talvez seja necessário qualificar totalmente as chamadas para essas APIs para resolver os tipos sem ambigüidade.