Code-behind e XAML no WPF
Code-behind é um termo usado para descrever o código que é unido a objetos definidos por marcação, quando uma página XAML é compilada por marcação. Este tópico descreve os requisitos para code-behind, bem como um mecanismo de código embutido alternativo para código em XAML.
Este tópico contém as seguintes seções:
Pré-requisitos
Este tópico pressupõe que você tenha lido o XAML no WPF e tenha algum conhecimento básico sobre o CLR e a programação orientada a objetos.
Code-Behind e a linguagem XAML
A linguagem XAML inclui recursos de nível de linguagem que possibilitam associar arquivos de código a arquivos de marcação, do lado do arquivo de marcação. Especificamente, a linguagem XAML define os recursos de linguagem da Diretiva x:Class, da Diretiva x:Subclass e diretiva x:ClassModifier. Exatamente como o código deve ser produzido e como integrar marcação e código não faz parte do que a linguagem XAML especifica. Cabe a estruturas como o WPF determinar como integrar o código, como usar XAML nos modelos de aplicativo e programação e as ações de build ou outro suporte que tudo isso requer.
Code-behind, manipulador de eventos e requisitos de classe parcial no WPF
A classe parcial deve derivar do tipo que apoia o elemento raiz.
Observe que, sob o comportamento padrão das ações de build de compilação de marcação, você pode deixar a derivação em branco na definição de classe parcial no lado da lógica. O resultado compilado assumirá o tipo de suporte da raiz da página para ser a base para a classe parcial, mesmo se não for especificado. No entanto, confiar nesse comportamento não é uma prática recomendada.
Os manipuladores de eventos que você escreve no code-behind devem ser métodos de instância e não podem ser métodos estáticos. Esses métodos devem ser definidos pela classe parcial dentro do namespace CLR identificado por
x:Class
. Você não pode qualificar o nome de um manipulador de eventos para instruir um processador XAML a procurar um manipulador de eventos para a fiação de evento em um escopo de classe diferente.O manipulador deve corresponder ao delegado para o evento apropriado no sistema de tipo de suporte.
Para a linguagem do Microsoft Visual Basic especificamente, você pode usar a palavra-chave
Handles
específica do idioma para associar manipuladores a instâncias e eventos na declaração do manipulador, em vez de anexar manipuladores com atributos em XAML. No entanto, essa técnica tem algumas limitações porque a palavra-chaveHandles
não pode dar suporte a todos os recursos específicos do sistema de eventos do WPF, como determinados cenários de eventos roteados ou eventos anexados. Para obter detalhes, consulte Visual Basic e manipulação de eventos WPF.
x:Code
x:Code é um elemento de diretiva definido em XAML. Um elemento de diretiva x:Code
pode conter código de programação embutido. O código definido inline pode interagir com o XAML na mesma página. O exemplo a seguir ilustra o código C# embutido. Observe que o código está dentro do elemento x:Code
e que o código deve estar cercado por <CDATA[
...]]>
para escapar do conteúdo para XML, de modo que um processador XAML (interpretando o esquema XAML ou o esquema WPF) não tente interpretar o conteúdo literalmente como XML.
<Page
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="MyNamespace.MyCanvasCodeInline"
>
<Button Name="button1" Click="Clicked">Click Me!</Button>
<x:Code><![CDATA[
void Clicked(object sender, RoutedEventArgs e)
{
button1.Content = "Hello World";
}
]]></x:Code>
</Page>
Limitações de código embutido
Considere evitar ou limitar o uso de código embutido. Em termos de arquitetura e filosofia de codificação, manter uma separação entre marcação e código subjacente garante que as funções de designer e desenvolvedor sejam muito mais distintas. Em um nível mais técnico, o código que você escreve para o código embutido pode ser complicado de escrever, porque você está sempre escrevendo na classe parcial XAML gerada e só pode usar os mapeamentos de namespace de XML padrão. Como não é possível adicionar instruções using
, você deve qualificar totalmente muitas das chamadas à API que fizer. Os mapeamentos padrão do WPF incluem a maioria, mas não todos os namespaces CLR presentes nos assemblies do WPF; você precisará qualificar totalmente as chamadas para tipos e membros contidos nos outros namespaces CLR. Você também não pode definir nada além da classe parcial no código embutido e todas as entidades de código de usuário referenciadas devem existir como um membro ou variável dentro da classe parcial gerada. Outros recursos de programação específicos da linguagem, como macros ou #ifdef
em variáveis globais ou variáveis de build, também não estão disponíveis. Para obter mais informações, consulte x:Code Intrinsic XAML Type (Tipo intrínseco x:Code (XAML)).
Consulte também
.NET Desktop feedback