Partilhar via


Code-Behind e XAML no WPF

Code-behind é um termo usado para descrever o código que é associado 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 do CLR e da programação orientada a objetos.

Code-Behind e a linguagem XAML

A linguagem XAML inclui recursos de nível de linguagem que tornam possível 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 x:Class Directive, x:Subclass Directivee x:ClassModifier Directive. 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 WPF determinar como integrar o código, como usar XAML nos modelos de aplicativo e programação e as ações de compilação ou outro suporte que tudo isso exige.

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 compilação de marcação, pode-se deixar a derivação em branco na definição de classe parcial do lado por trás do código. O resultado compilado assumirá que o tipo de suporte da raiz da página serve como base para a classe parcial, mesmo que isso não seja 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. Não é possível qualificar o nome de um manipulador de eventos para instruir um processador XAML a procurar um manipulador de eventos para ligação de eventos num escopo de classe diferente.

  • O manipulador deve corresponder ao delegado para o evento apropriado no sistema de tipos subjacente.

  • Para a linguagem 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-chave Handles não pode suportar todos os recursos específicos do sistema de eventos WPF, como determinados cenários de eventos roteados ou eventos anexados. Para obter detalhes, consulte Visual Basic e WPF Event Handling.

x:Código

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 em linha 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 ser cercado por <CDATA[...]]> para escapar do conteúdo para XML, para 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 do código embutido

Você deve considerar evitar ou limitar o uso de código embutido. Em termos de arquitetura e filosofia de codificação, manter uma separação entre a marcação e o código subjacente mantém as funções de designer e desenvolvedor muito mais distintas. Em um nível mais técnico, o código que você escreve para código embutido pode ser difícil de escrever, porque você está sempre gravando na classe parcial gerada por XAML e só pode usar os mapeamentos de namespace XML padrão. Como não é possível adicionar as instruções using, deve-se qualificar totalmente muitas das chamadas de API que fizer. Os mapeamentos WPF padrão incluem a maioria, mas não todos os namespaces CLR que estão presentes nos assemblies WPF; você terá que 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 que você referenciar 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 contra variáveis globais ou variáveis de compilação, também não estão disponíveis. Para obter mais informações, consulte x:Code Intrinsic XAML Type.

Ver também