2010-02-17 5 views
4

Je l'ai beaucoup vu et je ne sais pas ce que ça veut dire. Je dirais que ça a quelque chose à voir avec les espaces de noms? Je l'ai déjà googlé mais ce n'était pas clair pour moi quel est son but.A quoi sert le truc x: dans WPF?

Quelqu'un pourrait-il expliquer ce que c'est et dans quelles situations il est habituellement utilisé?

Merci

modifier:

<Window x:Class="WpfApplication8.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="525"> 
    <Grid> 
    </Grid> 
</Window> 

Mais par exemple, dans le code ci-dessus, je suis en train de définir x comme un alias pour l'espace de noms XAML sur la troisième ligne, bien que je me sers que même x à droite dans la première ligne de code. Comment cela peut-il arriver? Il ne se soucie pas de l'ordre dans lequel les choses apparaissent?

Edit2: -moi si je me trompe:

fenêtre x: Class = "WpfApplication8.MainWindow"

Le code ci-dessus va mettre une classe dérivée de la fenêtre en x: espace de noms WpfApplication8.MainWindow, tandis que

fenêtre x: Name = "abc"

mettra dans l'espace de noms x une instance de la classe Window nommée abc. Est-ce correct? Si j'ai raison, si je n'avais pas utilisé l'alias x, où aurait été mis en place la classe (premier cas) et l'instance (deuxième cas)? Nulle part, un peu comme des types anonymes? Ils sont utilisés mais l'endroit où ils sont n'est pas défini?

+1

J'ai mis à jour ma réponse en réponse à vos modifications, j'espère que cela aide. – Rory

+1

Mis à jour à nouveau. Je pense que vous devriez jeter un oeil à http://msdn.microsoft.com/en-us/library/ms747122.aspx pour une introduction aux concepts XAML. – Rory

Répondre

11

Vous avez raison, il s'agit d'un alias d'espace de noms XML. Si vous jetez un coup d'oeil en haut de votre fichier xaml, vous verrez qu'il correspond à l'espace de noms http://schemas.microsoft.com/winfx/2006/xaml. L'utilisation ultérieure du préfixe permet à l'analyseur xaml de localiser les classes définies dans cet espace de noms sans avoir à taper la totalité de l'élément. Ce n'est pas différent de la syntaxe using alias = very.long.namespace; en C#.

Vous devez normalement configurer un alias différent pour chaque espace de noms que vous avez l'intention d'utiliser dans le fichier xaml. Un commun lors de l'utilisation PRISM est la correspondance cal à clr-namespace:Microsoft.Practices.Composite.Presentation.Regions;assembly=Microsoft.Practices.Composite.Presentation; Vous pouvez ensuite accéder à la classe RegionManager définie dans cet espace de noms CLR à l'aide de cal:RegionManager. Lorsque vous utilisez Expression Blend, vous constaterez souvent qu'il ajoute xmlns:d="http://schemas.microsoft.com/expression/blend/2008" et xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" pour permettre certaines fonctionnalités de conception (définition de la largeur et de la hauteur pour le contrôle utilisateur sur la planche graphique).


Réponse à la question modifier: Vous pouvez jeter un oeil à un XML Namespace tutorial, qui est où XAML hérite de cette fonctionnalité de. Dans votre exemple, vous devez cesser de considérer les lignes comme des instructions individuelles, comme elles le seraient dans le code de procédure, et plutôt considérer l'élément dans son ensemble.Ce que j'essaie de dire c'est que parce que xmlns:x apparaît dans l'élément Window, il est accessible à cet élément et chaque élément enfant qu'il contient, la ligne sur laquelle il apparaît n'est pas importante car xaml n'est pas exécuté de haut en bas comme procédural le code est.


Réponse à la question modifier 2: Le x:Class attribute indique au compilateur ce que le nom de la classe partielle générée à partir du fichier XAML devrait être (si c'est ce que vous vouliez dire par « mettra une classe dérivée de la fenêtre ... ", alors vous avez raison).

Vous êtes loin sur la deuxième partie, le x:Name attribute indique au compilateur de générer un champ dans la classe contenant une référence à l'élément auquel l'attribut est attaché. Cela signifie que, dans votre exemple, votre code derrière le fichier pourra utiliser this.abc pour faire référence à l'élément Window défini dans le balisage xaml.

+0

Merci. Mais je ne comprends toujours pas. J'ai modifié mon message original. –

+0

Juste une dernière question, éditée dans mon message original. –

2

Il s'agit d'un alias de définition d'espace de noms.

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

Il agit un peu comme un court main ou déclaration using/import. En définissant l'espace de nom dans les attributs d'un tag, ala x:Name, vous garantissez que vous utilisez l'attribut correct dans l'espace correct.

Vous avez peut-être remarqué que vous devez ajouter votre propre alias d'espace de noms d'assembly lorsque vous souhaitez utiliser un contrôle WPF personnalisé.