Sdílet prostřednictvím


Code-Behind a XAML ve WPF

Code-behind je termín používaný k popisu kódu, který je spojený s objekty definovanými značkami, když je stránka XAML zkompilována jako značky. Toto téma popisuje požadavky na kód za kódem a také alternativní mechanismus vloženého kódu pro kód v XAML.

Toto téma obsahuje následující části:

Požadavky

Toto téma předpokládá, že jste si přečetli XAML ve WPF a máte základní znalosti CLR a objektově orientované programování.

Code-Behind a jazyk XAML

Jazyk XAML obsahuje funkce na úrovni jazyka, které umožňují přidružit soubory kódu k souborům značek. Konkrétně jazyk XAML definuje jazykové funkce x:Class direktiva, x:Subclass direktivaa x:ClassModifier direktiva. Přesné pokyny, jak vytvářet kód a jak integrovat značky s kódem, nejsou součástí toho, co jazyk XAML určuje. Je ponecháno na frameworky jako WPF, aby určily, jak integrovat kód, jak používat XAML v aplikaci a programovacích modelech, a jaké akce sestavení nebo jinou podporu toto vše vyžaduje.

Požadavky na kód, obslužnou rutinu událostí a částečné třídy ve WPF

  • Částečná třída musí být odvozena od typu, který zálohuje kořenový prvek.

  • Všimněte si, že při výchozím chování akcí sestavení kompilace značek můžete ponechat odvození prázdné v částečné definici třídy na straně kódu. Zkompilovaný výsledek bude předpokládat, že backingový typ kořenové stránky bude základem částečné třídy, i když není zadán. Spoléhat se ale na toto chování není osvědčeným postupem.

  • Obslužné rutiny událostí, které napíšete v kódu na pozadí, musí být instanční metody a nemohou být statické metody. Tyto metody musí být definovány částečnou třídou v rámci oboru názvů CLR identifikované x:Class. Nelze kvalifikovat název obslužné rutiny události, aby dal procesoru XAML pokyn hledat obslužnou rutinu události pro napojení událostí v jiném oboru třídy.

  • Obslužná rutina musí odpovídat delegátovi pro příslušnou událost v podkladovém systému typů.

  • Pro jazyk Microsoft Visual Basic můžete konkrétně použít specifické klíčové slovo jazyka Handles pro přiřazení obslužných rutin instancím a událostem v deklaraci obslužné rutiny, místo přidávání obslužných rutin pomocí atributů v XAML. Tato technika má ale určitá omezení, protože klíčové slovo Handles nemůže podporovat všechny specifické funkce systému událostí WPF, jako jsou některé směrované scénáře událostí nebo připojené události. Podrobnosti najdete v tématu Visual Basic a WPF Event Handling.

x:Code

x:Code je element direktivy definovaný v jazyce XAML. Element direktivy x:Code může obsahovat vložený programovací kód. Vložený kód může interagovat s XAML na stejné stránce. Následující příklad ukazuje vložený kód jazyka C#. Všimněte si, že kód je uvnitř x:Code elementu a že kód musí být obklopen <CDATA[...]]> k úniku obsahu XML, takže procesor XAML (interpretující schéma XAML nebo schéma WPF) se nepokusí interpretovat obsah doslova 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>

Omezení vloženého kódu

Měli byste se vyhnout použití vloženého kódu nebo ho omezit. Pokud jde o architekturu a filozofií kódování, udržování oddělení mezi značkováním a kódem na pozadí udržuje role návrháře a vývojáře odlišnější. Na techničtější úrovni může být kód, který napíšete pro vložený kód, složitý k zápisu, protože vždy píšete do vygenerované částečné třídy XAML a můžete používat pouze výchozí mapování oboru názvů XML. Protože nemůžete přidat using příkazy, musíte plně kvalifikovat mnoho volání rozhraní API, která provedete. Výchozí mapování WPF zahrnuje většinu, ale ne všechny obory názvů CLR, které jsou přítomné v sestaveníCH WPF; Budete muset plně kvalifikovat volání typů a členů obsažených v jiných oborech názvů CLR. Nemůžete také definovat nic nad rámec částečné třídy v vloženého kódu a všechny entity uživatelského kódu, na které odkazujete, musí existovat jako člen nebo proměnná ve vygenerované částečné třídě. Jiné programovací funkce specifické pro jazyk, jako jsou makra nebo #ifdef proti globálním proměnným nebo proměnným sestavení, nejsou také k dispozici. Další informace naleznete v tématu x:Code Vlastní typ XAML.

Viz také