46 votes

Qu'est-ce que le xmlns dans chaque fichier WPF ?

Qu'est-ce que xmlns ?

Quel rôle joue-t-il dans un fichier XAML lorsque nous créons un projet WPF ?

57voto

JaredPar Points 333733

Xmlns est une construction XML, pas nécessairement XAML, qui définit un espace de noms dans lequel résoudre les noms d'éléments xml. Comme il est défini sans qualificatif, il définit l'espace de noms par défaut dans lequel un nom d'élément XML doit être résolu.

Dans XAML, vous voyez généralement l'entrée suivante. Elle définit l'espace de noms par défaut comme étant essentiellement WPF et tous les noms d'éléments XML sont donc résolus comme des éléments WPF.

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

Il est également courant de voir des espaces de noms autres que ceux par défaut, tels que les suivants.

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

Il définit un espace de noms qualifié pour les éléments spécifiques à XAML. Si vous souhaitez que le nom d'un élément ou d'un attribut soit résolu dans cet espace de noms, vous devez le qualifier avec x. Par exemple

<StackPanel x:Name="foo" />

Cette définition comporte deux résolutions de noms.

  1. StackPanel - Comme il s'agit d'un nom non qualifié, il sera résolu dans l'espace de noms par défaut qui est WPF.
  2. x:Name - Le nom est qualifié par x et sera résolu dans le document XAML.

22voto

Joel Cochran Points 2643

Vous utilisez également xmlns pour obtenir une référence à vos propres espaces de noms dans votre XAML. L'une des premières choses que je fais lorsque je crée un nouveau projet WPF est d'ajouter une référence à l'espace de noms du projet :

xmlns:local="clr-namespace:MyWpfProject"

J'ai maintenant accès à toutes les classes que je peux créer dans mon projet (comme IValueConverters et DataTemplateSelectors) en utilisant le préfixe "local :".

<local:BooleanToColorConverter x:Key="booleanToColorConverter" DefaultBrush="Green" HighlightBrush="Red" />

Bien entendu, vous n'êtes pas obligé d'utiliser "local", vous pouvez lui donner le nom que vous voulez. Et vous pouvez ajouter des références à tout autre espace de noms dont vous avez besoin de la même manière.

12voto

Anthony Brien Points 2069

Vous pouvez également regrouper plusieurs espaces de noms CLR en un seul espace de noms XML en ajoutant les éléments suivants XmlnsDefinitionAttribute à vos assemblées. C'est ce que l'équipe WPF a fait, en mappant un grand nombre d'espaces de noms sous System.Windows comme ceci :

[XmlnsDefinitionAttribute(
    "http://schemas.microsoft.com/winfx/2006/xaml/presentation", 
    "System.Windows.Controls")]
[XmlnsDefinitionAttribute(
    "http://schemas.microsoft.com/winfx/2006/xaml/presentation", 
    "System.Windows.Ink")]

Cette syntaxe peut simplifier votre XAML, mais veillez à ne pas avoir de classes portant le même nom dans les espaces de noms du CLR que vous fusionnez.

6voto

Bryan Bailliache Points 557

Tiré de MSDN L'élément Root contient également les attributs xmlns et xmlns:x. Ces attributs indiquent au processeur XAML les espaces de noms XML qui contiennent les définitions des éléments auxquels le balisage fera référence. L'attribut xmlns indique spécifiquement l'espace de noms XML par défaut.

Cette utilisation de xmlns pour définir un champ d'application pour l'utilisation et le mappage est cohérente avec la spécification XML 1.0.

J'espère que cela vous aidera.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X