x:Diretiva de subclasses
Modifica o comportamento de compilação de marcação XAML quando x:Class
também é fornecido. Em vez de criar uma classe parcial baseada em x:Class
, o x:Class
fornecido é criado como uma classe intermediária e, em seguida, espera-se que sua classe derivada fornecida seja baseada em x:Class
.
Uso de atributos XAML
<object x:Class="namespace.classname" x:Subclass="subclassNamespace.subclassName">
...
</object>
Valores XAML
Valor | Descrição |
---|---|
namespace |
Opcional. Especifica um namespace CLR que contém classname . Se namespace for especificado, um ponto (.) separa namespace e classname . |
classname |
Necessário. Especifica o nome CLR da classe parcial que conecta o XAML carregado e seu code-behind para esse XAML. Ver Observações. |
subclassNamespace |
Opcional. Pode ser diferente de namespace se cada namespace puder resolver o outro. Especifica um namespace CLR que contém subclassName . Se subclassName for especificado, um ponto (.) separa subclassNamespace e subclassName . |
subclassName |
Necessário. Especifica o nome CLR da subclasse. |
Dependências
de Diretiva x:Class também deve ser fornecido no mesmo objeto, e esse objeto deve ser o elemento raiz da produção XAML.
Comentários
x:Subclass
uso destina-se principalmente a idiomas que não oferecem suporte a declarações de classe parciais.
A classe usada como x:Subclass
não pode ser uma classe aninhada e x:Subclass
deve se referir ao objeto raiz conforme explicado na seção "Dependências".
Caso contrário, o significado conceitual de x:Subclass
não será definido por uma implementação dos Serviços XAML .NET. Isso ocorre porque o comportamento dos Serviços XAML .NET não especifica o modelo de programação geral pelo qual a marcação XAML e o código de suporte estão conectados. As implementações de outros conceitos relacionados a x:Class
e x:Subclass
são executadas por estruturas específicas que usam modelos de programação ou modelos de aplicativo para definir como conectar marcação XAML, marcação compilada e code-behind baseado em CLR. Cada estrutura pode ter suas próprias ações de compilação que habilitam alguns dos comportamentos ou componentes específicos que devem ser incluídos no ambiente de compilação. Dentro de uma estrutura, as ações de compilação também podem variar com base na linguagem CLR específica que é usada para o code-behind.
Notas de uso do WPF
x:Subclass
pode estar em uma raiz de página ou na raiz Application na definição de aplicativo, que já tem x:Class
. Declarar x:Subclass
em qualquer elemento que não seja uma página ou raiz de aplicativo, ou especificá-lo onde não existe x:Class
, causa um erro em tempo de compilação.
Criar classes derivadas que funcionam corretamente para o cenário x:Subclass
é bastante complexo. Talvez seja necessário examinar os arquivos intermediários (os arquivos .g produzidos na pasta obj do seu projeto por compilação de marcação, com nomes que incorporam os nomes de arquivo .xaml). Esses arquivos intermediários podem ajudá-lo a determinar a origem de certas construções de programação nas classes parciais unidas no aplicativo compilado.
Os manipuladores de eventos na classe derivada devem ser internal override
(Friend Overrides
no Microsoft Visual Basic) para substituir os stubs para os manipuladores conforme criados na classe intermediária durante a compilação. Caso contrário, as implementações de classe derivada ocultam (sombra) a implementação de classe intermediária e os manipuladores de classe intermediária não são invocados.
Quando você define x:Class
e x:Subclass
, não é necessário fornecer nenhuma implementação para a classe referenciada por x:Class
. Você só precisa dar um nome através do atributo x:Class
para que o compilador tenha alguma orientação para a classe que ele cria nos arquivos intermediários (o compilador não seleciona um nome padrão neste caso). Você pode dar à classe x:Class
uma implementação; no entanto, este não é o cenário típico para usar x:Class
e x:Subclass
.
Ver também
.NET Desktop feedback