Obor názvů XAML mapování oboru názvů pro WPF XAML

Toto téma dále vysvětluje přítomnost a účel dvou mapování oboru názvů XAML, jak často se nachází v kořenové značce souboru WPF XAML. Popisuje také, jak vytvořit podobná mapování pro použití prvků definovaných ve vašem vlastním kódu nebo v rámci samostatných sestavení.

Co je obor názvů XAML

Obor názvů XAML je ve skutečnosti rozšířením konceptu oboru názvů XML. Techniky určení oboru názvů XAML spoléhají na syntaxi oboru názvů XML, konvenci použití identifikátorů URI jako identifikátorů oboru názvů, použití předpon k poskytnutí prostředků pro odkazování na více oborů názvů ze stejného zdroje značek atd. Primární koncept přidaný do definice XAML oboru názvů XML spočívá v tom, že obor názvů XAML znamená jak jedinečnost pro použití značek, tak i vliv na to, jak jsou entity značek potenciálně podporovány konkrétními obory názvů CLR a odkazovanými sestaveními. Tento druhý faktor je také ovlivněn konceptem kontextu schématu XAML. Pro účely toho, jak WPF pracuje s obory názvů XAML, si obecně můžete představit obory názvů XAML z hlediska výchozího oboru názvů XAML, oboru názvů jazyka XAML a všech dalších oborů názvů XAML, které jsou namapovány kódem XAML přímo na konkrétní záložní obory názvů CLR a odkazovaná sestavení.

Deklarace oboru názvů WPF a XAML

V rámci deklarací oboru názvů v kořenové značce mnoha souborů XAML uvidíte, že existují obvykle dvě deklarace oboru názvů XML. První deklarace mapuje celkový obor názvů XAML nebo klienta WPF jako výchozí:

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

Druhá deklarace mapuje samostatný obor názvů XAML, který mapuje (obvykle) na předponu x: .

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

Vztah mezi těmito deklaracemi spočívá v tom, že x: mapování předpon podporuje vnitřní objekty, které jsou součástí definice jazyka XAML, a WPF je jedna implementace, která používá XAML jako jazyk a definuje slovník jeho objektů pro XAML. Vzhledem k tomu, že použití slovníku WPF bude mnohem častější než použití vnitřních objektů XAML, je slovník WPF mapován jako výchozí.

Za x: předponou pro mapování podpory vnitřních objektů jazyka XAML následuje šablony projektů, vzorový kód a dokumentace jazykových funkcí v rámci této sady SDK. Obor názvů XAML definuje mnoho běžně používaných funkcí, které jsou nezbytné i pro základní aplikace WPF. Chcete-li například spojit jakýkoli kód za souborEM XAML prostřednictvím částečné třídy, musíte tuto třídu pojmenovat jako x:Class atribut v kořenovém prvku příslušného souboru XAML. Nebo jakýkoli prvek definovaný na stránce XAML, ke které chcete získat přístup jako klíčovaný prostředek, by měl mít x:Key atribut nastavený na daný prvek. Další informace otěchtoch kódech a dalších aspektech XAML naleznete v tématu XAML v tématu WPF nebo SYNTAXE XAML.

Mapování na vlastní třídy a sestavení

Obory názvů XML můžete mapovat na sestavení pomocí řady tokenů v rámci xmlns deklarace předpony, podobně jako standardní obory názvů WPF a XAML-vnitřní objekty XAML jsou mapovány na předpony.

Syntaxe přebírá následující možné pojmenované tokeny a následující hodnoty:

clr-namespace: Obor názvů CLR deklarovaný v rámci sestavení, který obsahuje veřejné typy, které mají být vystaveny jako elementy.

assembly= Sestavení, které obsahuje některé nebo všechny odkazované obory názvů CLR. Tato hodnota je obvykle pouze název sestavení, nikoli cesta, a nezahrnuje příponu (například .dll nebo .exe). Cesta k danému sestavení musí být vytvořena jako odkaz na projekt v souboru projektu, který obsahuje XAML, který se pokoušíte mapovat. Aby bylo možné začlenit podepisování verzí a silného názvu, assembly může být hodnota řetězec definovaný AssemblyName, nikoli jednoduchým názvem řetězce.

Všimněte si, že znak oddělující clr-namespace token od jeho hodnoty je dvojtečka (:) zatímco znak oddělující assembly token od jeho hodnoty je znaménko rovná se (=). Znak, který se má použít mezi těmito dvěma tokeny, je středník. Do deklarace také nezahrnujte žádné prázdné znaky.

Příklad základního vlastního mapování

Následující kód definuje příklad vlastní třídy:

namespace SDKSample {  
    public class ExampleClass : ContentControl {  
        public ExampleClass() {  
        ...  
        }  
    }  
}  
Namespace SDKSample  
    Public Class ExampleClass  
        Inherits ContentControl  
         ...  
        Public Sub New()  
        End Sub  
    End Class  
End Namespace  

Tato vlastní třída se pak zkompiluje do knihovny, která se nazývá SDKSampleLibrarypodle nastavení projektu (není zobrazeno).

Abyste mohli na tuto vlastní třídu odkazovat, musíte ji také zahrnout jako referenci pro aktuální projekt, což byste obvykle dělali pomocí uživatelského rozhraní Průzkumník řešení v sadě Visual Studio.

Teď, když máte knihovnu obsahující třídu a odkaz na ni v nastavení projektu, můžete přidat následující mapování předpon jako součást kořenového prvku v XAML:

xmlns:custom="clr-namespace:SDKSample;assembly=SDKSampleLibrary"

Abychom to všechno dali dohromady, je to XAML, který obsahuje vlastní mapování spolu s typickým výchozím nastavením a x: mapování v kořenové značce a pak použije předponu odkazu k vytvoření instance ExampleClass v tomto uživatelském rozhraní:

<Page x:Class="WPFApplication1.MainPage"  
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"  
    xmlns:custom="clr-namespace:SDKSample;assembly=SDKSampleLibrary">  
  ...  
  <custom:ExampleClass/>  
...  
</Page>  

Mapování na aktuální sestavení

assembly lze vynechat, pokud clr-namespace je odkazován v rámci stejného sestavení jako kód aplikace odkazující na vlastní třídy. Nebo ekvivalentní syntaxe pro tento případ je zadat assembly=, bez tokenu řetězce za znaménkem rovná se.

Vlastní třídy nelze použít jako kořenový prvek stránky, pokud je definován ve stejném sestavení. Částečné třídy nemusí být mapovány; Pouze třídy, které nejsou částečnou třídou stránky ve vaší aplikaci, musí být mapovány, pokud je chcete odkazovat jako prvky v XAML.

Mapování oborů názvů CLR na obory názvů XML v sestavení

WPF definuje atribut CLR, který využívá procesory XAML za účelem mapování více oborů názvů CLR na jeden obor názvů XAML. Tento atribut je XmlnsDefinitionAttributeumístěn na úrovni sestavení ve zdrojovém kódu, který vytváří sestavení. Zdrojový kód sestavení WPF používá tento atribut k mapování různých běžných oborů názvů, například System.Windows a System.Windows.Controls, na http://schemas.microsoft.com/winfx/2006/xaml/presentation obor názvů.

Přebírá XmlnsDefinitionAttribute dva parametry: název oboru názvů XML/XAML a název oboru názvů CLR. K mapování více oborů názvů CLR na stejný obor názvů XML může existovat více než jeden XmlnsDefinitionAttribute . Po namapování lze na členy těchto oborů názvů odkazovat i bez úplné kvalifikace, pokud je to žádoucí, poskytnutím příslušného using příkazu na stránce s kódem částečné třídy. Další podrobnosti najdete tady: XmlnsDefinitionAttribute.

Obory názvů návrháře a další předpony ze šablon XAML

Pokud pracujete s vývojovými prostředími nebo nástroji pro návrh pro WPF XAML, můžete si všimnout, že v kódu XAML existují další definované obory názvů a předpony XAML.

WPF Designer pro Visual Studio používá obor názvů návrháře, který je obvykle mapován na předponu d:. Novější šablony projektů pro WPF můžou předem namapovat tento obor názvů XAML tak, aby podporovaly výměnu XAML mezi návrhářem WPF pro Visual Studio a dalšími návrhovými prostředími. Tento obor názvů XAML návrhu slouží k zachování stavu návrhu při zaokrouhlování uživatelského rozhraní založeného na XAML v návrháři. Používá se také pro funkce, jako d:IsDataSourceje například , které umožňují zdroje dat runtime v návrháři.

Další předpona, kterou se může zobrazit mapovaná, je mc:. mc: je pro kompatibilitu značek a využívá vzor kompatibility značek, který není nutně specifický pro XAML. Do určité míry lze funkce kompatibility značek použít k výměně XAML mezi architekturami nebo napříč jinými hranicemi implementace backingu, práce mezi kontexty schématu XAML, zajištění kompatibility pro omezené režimy v návrhářích atd. Další informace o konceptech kompatibility značek a jejich souvislosti s WPF naleznete v tématu Funkce jazyka kompatibilita značek (mc:).

Načítání WPF a sestavení

Kontext schématu XAML pro WPF se integruje s aplikačním modelem WPF, který zase používá koncept AppDomaindefinovaný CLR . Následující sekvence popisuje, jak kontext schématu XAML interpretuje, jak načíst sestavení nebo najít typy za běhu nebo v době návrhu na základě použití AppDomain WPF a dalších faktorů.

  1. Iterujte prostřednictvím AppDomain, hledá již načtené sestavení, které odpovídá všem aspektům názvu, počínaje naposledy načteným sestavením.

  2. Pokud je název kvalifikovaný, zavolejte Assembly.Load(String) kvalifikovaný název.

  3. Pokud krátký název + token veřejného klíče kvalifikovaného názvu odpovídá sestavení, ze kterého byl kód načten, vraťte toto sestavení.

  4. K volání Assembly.Load(String)použijte krátký název + token veřejného klíče .

  5. Pokud je jméno nekvalifikované, zavolejte Assembly.LoadWithPartialName.

Volné XAML nepoužívá krok 3; není načteno ze sestavení.

Zkompilovaná xaml pro WPF (vygenerovaná prostřednictvím XamlBuildTask) nepoužívá již načtená sestavení z AppDomain (krok 1). Název by také neměl být nikdy nekvalifikovaný z výstupu XamlBuildTask, takže krok 5 se nepoužije.

Kompilovaný BAML (vygenerovaný prostřednictvím PresentationBuildTask) používá všechny kroky, i když BAML by také neměl obsahovat nekvalifikované názvy sestavení.

Viz také