Związane z kodem i XAML w WPF

Code-behind to termin używany do opisywania kodu połączonego z obiektami zdefiniowanymi za pomocą znaczników, gdy strona XAML jest kompilowana na podstawie znaczników. 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 przeczytano kod XAML w WPF i masz podstawową wiedzę na temat języka CLR i programowania obiektowego.

Code-Behind i język XAML

Język XAML zawiera funkcje na poziomie języka, które umożliwia 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,x:Subclass, dyrektywę i dyrektywę x:ClassModifier. Dokładnie sposób, w jaki powinien zostać wyprodukowany kod oraz jak zintegrować kod i znaczników, nie jest częścią tego, co określa język XAML. Do platform, takich jak WPF, należy określenie sposobu integracji kodu, sposobu używania kodu XAML w aplikacjach i modelach programowania oraz akcji kompilacji lub innej obsługi, których wymaga to wszystko.

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

  • Klasa częściowa musi pochodzić od typu, który stanowi kopię zapasową elementu głównego.

  • Należy pamiętać, że w domyślnym zachowaniu akcji kompilacji znaczników można pozostawić pustą wartość pochodną w definicji klasy częściowej po stronie kodu. Skompilowany wynik zakłada, że typ zapasowy 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.

  • Procedury obsługi zdarzeń pisane w za code-behind muszą być metodami wystąpienia i nie mogą być metodami statycznych. Te metody muszą być zdefiniowane przez klasę częściową w przestrzeni nazw CLR identyfikowanej przez klasę x:Class. Nie można zakwalifikować nazwy procedury obsługi zdarzeń, aby poinstruować procesor XAML, aby poszukał procedury obsługi zdarzeń dla okablowania zdarzeń w innym zakresie klasy.

  • Procedura obsługi musi być dopasowana do delegata dla odpowiedniego zdarzenia w systemie typów kopii zapasowej.

  • W szczególności dla języka Microsoft Visual Basic można użyć słowa kluczowego specyficznego dla języka, Handles aby skojarzyć programy obsługi z wystąpieniami i zdarzeniami w deklaracji procedury obsługi, zamiast dołączać programy obsługi z atrybutami w systemie zdarzeń WPF, takimi jak niektóre scenariusze zdarzeń trasowane lub zdarzenia dołączone. Aby uzyskać szczegółowe informacje, zobacz Visual Basic i Obsługa zdarzeń WPF.

x:Code

x:Code jest elementem dyrektywy zdefiniowanym w schemacie WPF) nie będzie 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ć unikanie lub ograniczanie użycia kodu wbudowanego. Jeśli chodzi o architekturę i zasady kodowania, zachowanie separacji między znacznikami i kodem sprawia, że role projektanta i dewelopera są znacznie bardziej odrębne. Na poziomie bardziej technicznym kod pisany dla kodu wbudowanego może być niezręcznie zapisywany, ponieważ zawsze zapisujesz w mapowaniach WPF większość, ale nie wszystkie przestrzenie nazw CLR, które są obecne w zestawach WPF; Należy w pełni kwalifikować wywołania do typów i elementów członkowskich zawartych w innych przestrzeniach nazw CLR. Nie można również zdefiniować niczego poza klasą częściową w kodzie w tekście, a wszystkie jednostki kodu użytkownika, do których się odwołujesz, muszą istnieć jako element członkowski lub zmienna w wygenerowanej klasie częściowej. Inne funkcje programowania specyficzne dla języka, takie jak makra, #ifdef zmienne globalne lub zmienne kompilacji, również nie są dostępne. Aby uzyskać więcej informacji, zobacz x:Code Intrinsic XAML Type (Wewnętrzny typ XAML x:Code).

Zobacz też