2010-12-16 432 views
9

SalutationsWPF - Contrôle central (étiquette) dans Canvas

J'essaie de corriger le positionnement des contrôles dans mon application WPF. Dans mon application j'ai plusieurs étiquettes qui sont chacune dans une toile différente. J'essaie de centrer l'étiquette dans la toile. Le code que j'ai actuellement une étiquette est la suivante:

<Canvas Height="42" HorizontalAlignment="Left" Margin="0,1,0,0" Name="canvasPlayer1" VerticalAlignment="Top" Width="172" > 
    <Label Content="" Foreground="White" FontSize="15" FontFamily="Eurostile LT ExtendedTwo" Height="Auto" HorizontalAlignment="Center" Margin="0,5,0,0" Name="labelPlayer1Name" VerticalAlignment="Center" Width="Auto" /> 
</Canvas> 

Maintenant, pour commencer le problème est qu'il ne centre pas le texte du tout, il reste à la position initiale. Ce que j'essaye de réaliser est de centrer le contenu de l'étiquette dans cette toile MAIS cela ne peut pas excéder la largeur de la toile.

Des suggestions utiles sont les bienvenues! Si vous avez des commentaires concernant mon mode de pensée pour résoudre ce problème, veuillez m'en aviser moi aussi!

Nous vous remercions à l'avance

+1

Pourquoi avez-vous utilisé Canvas? est-ce que tu dois dessiner quelque chose? utilisez Grid insted. –

+0

duplication possible de [Obtenir la position absolue de l'élément dans la fenêtre dans wpf] (http://stackoverflow.com/questions/386731/get-absolute-position-of-element-within-the-window-in-wpf) – Elmo

Répondre

15

Vous ne devriez pas utiliser de la toile pour cela. Les propriétés d'alignement et les marges n'auront aucun effet sur les éléments disposés dans un canevas. Ce que vous devez utiliser à la place est une grille. Le canevas n'est pas particulièrement utile pour la plupart des scénarios de mise en page.

<Grid Height="42" HorizontalAlignment="Left" Margin="0,1,0,0" 
     Name="canvasPlayer1" VerticalAlignment="Top" Width="172" > 
    <Label Content="" Foreground="White" FontSize="15" 
      FontFamily="Eurostile LT ExtendedTwo" 
      HorizontalAlignment="Center" Margin="0,5,0,0" 
      Name="labelPlayer1Name" VerticalAlignment="Center" /> 
</Grid> 
+0

J'ai utilisé une toile pour sélectionner la zone dans laquelle elle devait se centrer. Je suppose que je devrais aligner ma grille entièrement avec des lignes et des colonnes alors je suppose? Merci pour la réponse btw! – Citroenfris

+2

Vous n'avez pas réellement besoin de créer les lignes et les colonnes si vous ne voulez pas (bien que cela rende les dispositions beaucoup plus propres). Vous pouvez simplement utiliser les marges et les propriétés d'alignement à l'intérieur d'une grille 1x1. C'est en fait ce que le concepteur WPF dans Visual Studio et Blend font par défaut. – Josh

+0

Merci beaucoup, je vais faire un tourbillon! – Citroenfris