Partilhar via


Namespaces XAML e o mapeamento de Namespace para WPF XAML

Ainda mais este tópico explica a presença e a finalidade dos dois mapeamentos de namespace XAML como normalmente encontrados na marca de raiz de um arquivo XAML do WPF. It also describes how to produce similar mappings for using elements that are defined in your own code, and/or within separate assemblies.

Este tópico contém as seguintes seções.

  • O que é um Namespace XAML?
  • The WPF and XAML Namespace Declarations
  • Mapping to Custom Classes and Assemblies
  • Mapping CLR Namespaces to XML Namespaces in an Assembly
  • Namespaces de Designer e outros prefixos de modelos XAML
  • O WPF e o carregamento de Assembly
  • Tópicos relacionados

O que é um Namespace XAML?

Um namespace XAML é realmente uma extensão do conceito de um espaço para nome XML. As técnicas de especificar um namespace XAML contam com a sintaxe de espaço para nome XML, a convenção de usar URIs como identificadores de namespace, utilizando os prefixos para fornecer um meio para fazer referência a vários namespaces da mesma origem de marcação e assim por diante. O principal conceito que é adicionado à definição XAML do namespace XML é que um namespace XAML implica tanto um escopo de exclusividade para os usos da marcação e também influencia como entidades de marcação potencialmente contam namespaces específicos do CLR e assemblies referenciados. Essa última consideração também é influenciada pelo conceito de um contexto de esquema XAML. Mas, para fins de funcionamento do WPF com namespaces XAML, você pode geralmente pensar namespaces do XAML em termos de um namespace XAML padrão, o namespace de linguagem XAML e qualquer outra namespaces XAML como mapeados por sua marcação XAML diretamente para namespaces do CLR de apoio específicos e assemblies referenciados.

The WPF and XAML Namespace Declarations

Dentro de declarações de namespace na marca raiz de muitos arquivos XAML, você verá que há normalmente duas declarações de namespace XML. A primeira declaração mapeia o cliente do WPF geral / framework namespace XAML como padrão:

xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"

A segunda declaração mapeia um namespace separado do XAML, mapeando-(normalmente) para o x: prefixo.

xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"

A relação entre essas declarações é que o x: o mapeamento de prefixo suporta os intrínsecos que fazem parte da definição de linguagem XAML, e WPF é uma implementação que usa o XAML como uma linguagem e define um vocabulário de seus objetos XAML. Como os usos do vocabulário WPF será muito mais comuns que os usos de intrínsecos do XAML, o vocabulário do WPF é mapeado como padrão.

O x: convenção de prefixo para a linguagem XAML intrínsecos suportam de mapeamento é seguida de modelos de projeto, o código de exemplo e a documentação dos recursos de idioma deste SDK. Namespace XAML define muitos recursos comumente usados que são necessários, mesmo para aplicativos básicos do WPF. Por exemplo, para ingressar nenhum code-behind para um arquivo XAML por meio de uma classe parcial, você deve nomear essa classe como a x:Class atributo no elemento raiz do arquivo relevante do XAML. Ou, qualquer elemento, conforme definido em uma página XAML que você deseja acessar como um recurso com chave deve ter o x:Key atributo definido no elemento de pergunta. Para obter mais informações sobre estes e outros aspectos do XAML, consulte Visão geral do XAML (WPF) ou Sintaxe XAML em detalhes.

Mapping to Custom Classes and Assemblies

Você pode mapear os namespaces XML para assemblies usando uma série de tokens dentro de um xmlns declaração de prefixo, semelhante a como os namespaces XAML padrão do WPF e XAML intrínsecos são mapeados para prefixos.

The syntax takes the following possible named tokens and following values:

clr-namespace:O namespace CLR declarados dentro do assembly que contém os tipos públicos para expor como elementos.

assembly= The assembly that contains some or all of the referenced CLR namespace. Esse valor geralmente é apenas o nome do assembly, não o caminho e não inclui a extensão (como, por exemplo,. dll ou. exe). O caminho para o assembly deve ser estabelecido como uma referência de projeto no arquivo de projeto que contém o XAML que você está tentando mapear. Para incorporar o controle de versão e a assinatura de nome forte, o assembly valor pode ser uma seqüência de caracteres, conforme definido pela AssemblyName, em vez do nome de cadeia de caracteres simple.

Note that the character separating the clr-namespace token from its value is a colon (:) whereas the character separating the assembly token from its value is an equals sign (=). The character to use between these two tokens is a semicolon. Além disso, não inclua qualquer espaço em branco em qualquer lugar na declaração.

Um exemplo básico de mapeamento personalizado

O código a seguir define uma classe personalizada de exemplo:

namespace SDKSample {
    public class ExampleClass : ContentControl {
        public ExampleClass() {
        ...
        }
    }
}
Namespace SDKSample
    Public Class ExampleClass
        Inherits ContentControl
         ...
        Public Sub New()
        End Sub
    End Class
End Namespace

Essa classe personalizada é compilada em uma biblioteca, o que é chamada por configurações do projeto (não mostradas) SDKSampleLibrary.

Para fazer referência a essa classe personalizada, você também precisa para incluí-lo como uma referência para o seu projeto atual, o que você faria normalmente usando a interface do usuário do Solution Explorer em Visual Studio.

Agora que você tem uma biblioteca que contém uma classe e uma referência a ele em configurações de projeto, você pode adicionar o mapeamento de prefixo a seguir como parte do seu elemento raiz em XAML:

xmlns:custom="clr-namespace:SDKSample;assembly=SDKSampleLibrary"

Para juntar tudo, a seguir é XAML que inclui o mapeamento personalizado juntamente com o padrão típico e x: mapeamentos na marca de raiz, em seguida, usa uma referência prefixada instanciar ExampleClass em que interface do usuário:

<Page x:Class="WPFApplication1.MainPage"
    xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:custom="clr-namespace:SDKSample;assembly=SDKSampleLibrary">
  ...
  <custom:ExampleClass/>
...
</Page>

Mapping to Current Assemblies

assembly can be omitted if the clr-namespace referenced is being defined within the same assembly as the application code that is referencing the custom classes. Or, an equivalent syntax for this case is to specify assembly=, with no string token following the equals sign.

Custom classes cannot be used as the root element of a page if defined in the same assembly. Classes parciais não precisam ser mapeados; somente as classes que não são a classe parcial de uma página em seu aplicativo precisam ser mapeado se você pretende fazer referência a eles como elementos em XAML.

Mapping CLR Namespaces to XML Namespaces in an Assembly

WPF define um atributo do CLR é consumido por processadores XAML para mapear vários namespaces CLR para um único namespace XAML. This attribute, XmlnsDefinitionAttribute, is placed at the assembly level in the source code that produces the assembly. O código de origem de assembly do WPF usa esse atributo para mapear vários namespaces comuns, como System.Windows e System.Windows.Controls, para o https://schemas.microsoft.com/winfx/2006/xaml/presentation namespace.

O XmlnsDefinitionAttribute usa dois parâmetros: o nome do namespace XML/XAML e o nome do namespace CLR. Mais de um XmlnsDefinitionAttribute podem existir para mapear vários espaços para nome CLR para o mesmo espaço para nome XML. Once mapped, members of those namespaces can also be referenced without full qualification if desired by providing the appropriate using statement in the partial-class code-behind page. For more details, see XmlnsDefinitionAttribute.

Namespaces de Designer e outros prefixos de modelos XAML

Se você estiver trabalhando com ambientes de desenvolvimento e/ou ferramentas de design para WPF XAML, você notará que há outros namespaces XAML definidos / prefixos dentro a marcação XAML.

WPF Designer for Visual Studiousa um namespace de designer que normalmente é mapeado para o prefixo d:. Modelos de projeto mais recentes para o WPF podem pre-map esse namespace XAML para suporte ao intercâmbio do XAML entre WPF Designer for Visual Studio e outros ambientes de design. Este namespace XAML do design é usado coisas do estado de design enquanto a interface do usuário baseada em XAML no designer de roundtripping para. Ele também é usado para recursos, como d:IsDataSource, que permitem a fontes de dados de tempo de execução em um designer.

Outro prefixo talvez você veja mapeado é mc:. mc:é para compatibilidade de marcação e está aproveitando um padrão de compatibilidade de marcação que não é necessariamente específicas de XAML. Até certo ponto, a compatibilidade de marcação recursos podem ser usados para trocar o XAML entre estruturas ou outros limites de implementação de backup funcione entre contextos de esquema XAML, fornecem compatibilidade para os modos limitados nos designers e assim por diante. Para obter mais informações sobre conceitos de compatibilidade de marcação e como eles se relacionam ao WPF, consulte Compatibilidade de marcação (mc:) Recursos da linguagem.

O WPF e o carregamento de Assembly

O contexto de esquema XAML para WPF integra-se com o modelo de aplicativo do WPF, por sua vez, usa o conceito de definido o CLR de AppDomain. A seqüência a seguir descreve como o contexto de esquema XAML interpreta como carregar assemblies ou localizar tipos em tempo de execução ou o tempo de design com base no uso do WPF AppDomain e outros fatores.

  1. Iterar por meio de AppDomain, procurando um assembly já carregado, que corresponde a todos os aspectos do nome, a partir do assembly foi carregado por recentemente.

  2. Se o nome é qualificado, ligue para Assembly.Load(String) no nome qualificado.

  3. Se o token de chave pública de um nome qualificado + nome curto coincidir com o assembly que a marcação foram carregada a partir, retorne a esse assembly.

  4. Use o nome curto + o token de chave pública para chamar Assembly.Load(String).

  5. Se o nome não qualificado, chamada Assembly.LoadWithPartialName.

XAML livre não usa a etapa 3; Não há nenhum assembly carregado do.

Compilado XAML para WPF (gerada por meio de XamlBuildTask) não usa os assemblies já carregado de AppDomain (etapa 1). Além disso, o nome nunca deve ser não qualificado da saída de XamlBuildTask, portanto, não se aplicam a etapa 5.

Compilado BAML (gerada por meio de PresentationBuildTask) usa todas as etapas, embora BAML também não deve conter os nomes não qualificados do assembly.

Consulte também

Conceitos

Visão geral do XAML (WPF)

Outros recursos

Noções básicas sobre Namespaces XML

Histórico de alterações

Date

History

Motivo

Novembro de 2010

Exemplo de Visual Basic ausente adicionado.

Correção de bug de conteúdo.