Związane z kodem i XAML w WPF

Code-behind to termin używany do opisywania kodu, który jest połączony z obiektami zdefiniowanymi narzutu, gdy strona XAML jest kompilowana. W tym temacie opisano wymagania dotyczące kodu, a także alternatywny mechanizm kodu wbudowanego dla kodu w języku XAML.

Ten temat zawiera następujące sekcje:

Wymagania wstępne

W tym temacie założono, że znasz język XAML w WPF i masz podstawową wiedzę na temat środowiska CLR i programowania obiektowego.

Kod za i język XAML

Język XAML zawiera funkcje na poziomie języka, które umożliwiają kojarzenie plików kodu z plikami znaczników po stronie pliku znaczników. W szczególności język XAML definiuje funkcje języka x:Class Directive, x:Subclass Directive i x:ClassModifier Dyrektywy. Dokładnie sposób tworzenia kodu i sposobu integrowania znaczników i kodu nie jest częścią tego, co określa język XAML. Pozostawiono strukturę, taką jak WPF, aby określić sposób integracji kodu, jak używać języka XAML w modelach aplikacji i programowania, a także akcje kompilacji lub inne wsparcie, których to wymaga.

Wymagania dotyczące kodu, obsługi zdarzeń i częściowej klasy w WPF

  • Klasa częściowa musi pochodzić z typu, który wspiera element główny.

  • Należy pamiętać, że w ramach domyślnego zachowania akcji kompilacji kompilacji kompilowania znaczników można pozostawić wartość pustą w definicji klasy częściowej po stronie kodu. Skompilowany wynik zakłada, że typ tworzenia kopii zapasowej katalogu głównego strony będzie podstawą dla klasy częściowej, nawet jeśli nie zostanie określony. Jednak poleganie na tym zachowaniu nie jest najlepszym rozwiązaniem.

  • Programy obsługi zdarzeń pisane w kodzie muszą być metodami wystąpień i nie mogą być metodami statycznych. Te metody muszą być zdefiniowane przez klasę częściową w przestrzeni nazw CLR zidentyfikowane przez x:Class. Nie można zakwalifikować nazwy programu obsługi zdarzeń, aby poinstruować procesor XAML, aby wyszukać procedurę obsługi zdarzeń dla okablowania zdarzeń w innym zakresie klasy.

  • Procedura obsługi musi odpowiadać delegatowi odpowiedniego zdarzenia w systemie typów kopii zapasowych.

  • W szczególności w języku Microsoft Visual Basic można użyć słowa kluczowego specyficznego dla Handles języka, aby skojarzyć programy obsługi z wystąpieniami i zdarzeniami w deklaracji programu obsługi, zamiast dołączać programy obsługi z atrybutami w języku XAML. Jednak ta technika ma pewne ograniczenia, ponieważ Handles słowo kluczowe nie może obsługiwać wszystkich określonych funkcji systemu zdarzeń WPF, takich jak niektóre scenariusze zdarzeń trasowanych lub dołączone zdarzenia. Aby uzyskać szczegółowe informacje, zobacz Visual Basic i WPF Event Handling (Obsługa zdarzeń w języku Visual Basic i WPF).

x:Code

x:Code to element dyrektywy zdefiniowany w języku XAML. Element x:Code dyrektywy może zawierać wbudowany kod programowania. Kod zdefiniowany w tekście może współdziałać z językiem XAML na tej samej stronie. Poniższy przykład ilustruje wbudowany kod języka C#. Zwróć uwagę, że kod znajduje się wewnątrz x:Code elementu i że kod musi być otoczony <CDATA[przez ...]]> w celu uniknięcia zawartości kodu XML, tak aby procesor XAML (interpretowanie schematu XAML lub schematu WPF) nie próbował interpretować zawartości dosłownie jako 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>

Ograniczenia kodu wbudowanego

Należy rozważyć uniknięcie lub ograniczenie użycia kodu wbudowanego. Jeśli chodzi o architekturę i filozofię kodowania, utrzymanie separacji między adiustacjami i kodami zapewnia znacznie bardziej odrębne role projektanta i dewelopera. Na bardziej technicznym poziomie kod pisany dla kodu wbudowanego może być niezręczny do zapisu, ponieważ zawsze zapisujesz w klasie częściowej wygenerowanej przez język XAML i może używać tylko domyślnych mapowań przestrzeni nazw XML. Ponieważ nie można dodać using instrukcji, musisz w pełni zakwalifikować wiele wywołań interfejsu API, które wykonasz. Domyślne mapowania WPF obejmują większość, ale nie wszystkie przestrzenie nazw CLR, które znajdują się w zestawach WPF; Konieczne będzie pełne kwalifikowanie wywołań do typów i elementów członkowskich zawartych w innych przestrzeniach nazw CLR. Nie można również zdefiniować żadnych elementów poza klasą częściową w kodzie wbudowanym, a wszystkie jednostki kodu użytkownika, do których się odwołujesz, muszą istnieć jako składowa lub zmienna w wygenerowanej klasie częściowej. Inne funkcje programowania specyficzne dla języka, takie jak makra lub #ifdef zmienne globalne lub zmienne kompilacji, również nie są dostępne. Aby uzyskać więcej informacji, zobacz x:Code, wewnętrzny typ XAML.

Zobacz też