2010-11-19 5 views
3

Je suis actuellement en train de lire le livre Pro WPF en C# 2008, et je suis un débutant à WPF.Meilleure pratique pour la fermeture des tags dans WPF

J'ai essentiellement des questions concernant les meilleures pratiques, car je veux écrire du code qui est communément accepté par d'autres développeurs.

Je vois tout au long du livre, que l'auteur utilise différentes façons de fermer les étiquettes à des fins différentes. Je vais vous donner un exemple:

Lors de la création d'une grille, et en définissant les lignes et les colonnes, il écrit toujours ce code similaire à ceci:

<Grid.ColumnDefinitions> 
    <ColumnDefinition /> 
    <ColumnDefinition /> 
</Grid.ColumnDefinitions> 

Alors il ferme la balise « en ligne » dans la balise puisque la balise n'a pas de contenu (je ne sais pas si en ligne est le libellé correct pour cela)

Mais la plupart des autres endroits, il va mettre une étiquette de fermeture, même si ce n'est pas contenu comme celui-ci

<TextBlock Text="{Binding Path=CategoryName}"></TextBlock> 

Je vois aussi que s'il définit les attributs dans le ColumnDefinition cas, il ajoutera également la balise de fermeture comme celui-ci

<ColumnDefinition Width="Auto"></ColumnDefinition> 

Ma question est tout simplement. Y a-t-il une raison de l'écrire comme ça? Je pense qu'il semble plus ordonné d'omettre la balise de fermeture car il n'y a pas de contenu dans tous les cas.

Donc est-ce juste une question de préférence personnelle, ou y at-il d'autres raisons de basculer entre les deux.

+0

J'ai marqué celui que j'ai le mieux aimé :) Merci pour votre effort. –

Répondre

1

Il s'agit plus d'une chose XML que d'une chose WPF et la plupart du temps n'a pas d'importance puisqu'ils analysent simplement le XML. En général, je recommande toujours d'utiliser "Éléments vides" (< tag/>) lorsque vous n'avez aucun élément enfant, car il semble plus propre et empêche tout espace accidentel dans le contenu de la balise.

Il est probablement incompatible dans le livre par hasard

0

À mon avis, c'est plus d'un goût personnel. Mais cela étant dit, il existe des scénarios où vous êtes obligé d'utiliser la notation comme <keyword></keyword>. Donc, à moins d'être forcé, il n'y a pas de raisons pour lesquelles vous devriez écrire d'une manière ou d'une autre. J'ajoute cette question à ma liste de favoris pour voir s'il y a des directives spéciales.

+0

Dans quels scénarios êtes-vous obligé d'utiliser ce type de syntaxe? –

+0

Un exemple simple serait une grille. Une grille peut avoir plusieurs contrôles à l'intérieur, mais comme vous pouvez le voir ... l'écrire comme une étiquette de fermeture automatique, ne fonctionne pas. –

2

C'est une préférence personnelle car le code est équivalent.

Cependant, je peux voir que

<TextBlock Text="{Binding Path=CategoryName}"></TextBlock> 

surviendront si la ligne est à l'origine écrit:

<TextBlock Text="{Binding Path=CategoryName}"> 
    some other xaml 
</TextBlock> 

mais « l'autre XAML » est supprimée (pour une raison quelconque)

Ce que vous devez faire est de créer une norme et de s'y tenir (quelle que soit la façon dont vous décidez d'y aller).

0

Lorsque vous ajoutez un contrôle qui n'a pas d'éléments à l'intérieur, mieux fermer par étiquette auto-fermeture « /> » au lieu de la balise de fermeture dure.

par ex. Difficile de choisir une réponse ici les gars, mais il semble que tout le monde s'accorde à dire que c'est juste une préférence personnelle.

<Label> 
    <Label.Content> 
     <TextBlock> 
      Test! 
     </TextBlock> 
    </Label.Content> 
</Label> 


<TextBlock Text={Binding Name}/> 
Questions connexes