Podkladový kód a kód XAML v subsystému WPF

Kód je termín, který se používá k popisu kódu, který je spojený s objekty definovanými značkami, když je stránka XAML zkompilována značek. 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:

Předpoklady

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

Kód za kódem a jazyk XAML

Jazyk XAML obsahuje funkce na úrovni jazyka, které umožňují přidružit soubory kódu k souborům revizí na straně souboru značek. Konkrétně jazyk XAML definuje jazykové funkce x:Class Direktiva, x:Subclass Direktiva a x:ClassModifier Direktiva. Přesně to, jak se má kód vytvořit a jak integrovat kód a kód, není součástí toho, co jazyk XAML určuje. Je ponechána na architekturách, jako je WPF, určit, jak integrovat kód, jak používat XAML v aplikacích a programovacích modelech, a akce sestavení nebo jiné podpory, které to 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é zapíšete v kódu, musí být metody instance 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ého x:Class. Nelze kvalifikovat název obslužné rutiny události, která dává procesoru XAML pokyn, aby hledal obslužnou rutinu události pro zapojení událostí v jiném oboru třídy.

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

  • Pro jazyk Microsoft Visual Basic konkrétně můžete použít klíčové slovo specifické pro Handles jazyk k přidružení obslužných rutin k instancím a událostem v deklaraci obslužné rutiny místo připojení obslužných rutin s atributy v XAML. Tato technika ale má určitá omezení, protože Handles klíčové slovo nemůže podporovat všechny specifické funkce systému událostí WPF, například určité scénáře směrovaných událostí nebo připojené události. Podrobnosti najdete v tématu Zpracování událostí jazyka Visual Basic a WPF.

x:Code

x:Code je element direktivy definovaný v jazyce XAML. Element x:Code direktivy může obsahovat vložený programovací kód. Kód definovaný vloženým kódem může pracovat 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 filozofie kódování, udržování oddělení mezi revizemi a kódem za sebou udržuje návrháře a vývojářské role mnohem odlišnější. Na techničtější úrovni může být kód, který napíšete pro vložený kód,wkward k zápisu, protože vždy píšete do vygenerované částečné třídy XAML a může používat pouze výchozí mapování oboru názvů XML. Protože nemůžete přidávat 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ě. Nejsou dostupné ani jiné programovací funkce specifické pro jazyk, jako jsou makra nebo #ifdef globální proměnné nebo proměnné sestavení. Další informace naleznete v tématu x:Code Vnitřní typ XAML.

Viz také