2011-03-04 9 views
0

J'ai un ListBox en bas à droite de ma fenêtre, et je veux placer un Label sur le côté supérieur gauche de ce ListBox.Comment attacher un contrôle à un autre contrôle dans WPF?

Actuellement, je me sers un DockPanel pour ancrer la ListBox sur le côté en bas à droite de la fenêtre, mais je ne suis pas sûr de savoir comment « groupe » l'étiquette et le ListBox ensemble afin qu'ils restent ensemble.

Est-ce que je dois accomplir ceci avec des marges codées en dur pour les deux afin qu'elles semblent être attachées ensemble?

De même, quel contrôle dois-je utiliser pour faire cela? StackPanel, DockPanel, etc?

Répondre

3

Nest un autre DockPanel. Mettez votre étiquette en tant que premier enfant et amarrez-la en haut. Mettez votre ListBox comme le deuxième enfant; cela remplira l'espace restant.

<DockPanel Name="YourExistingDockPanel"> 
    ... 
    <DockPanel> 
     <Label DockPanel.Dock="Top" Content="YourLabel"/> 
     <ListBox .../> 
    </DockPanel> 
    ... 
</DockPanel> 
+0

Merci J'ai fait cela Mais l'étiquette reste toujours en haut de la fenêtre et la liste de la liste semble centrée. Mais les deux ont l'air d'être ancrés sur le côté droit de l'écran. –

+0

Ou dois-je définir la hauteur du DockPanel? –

+0

Joe a la bonne approche pour faire Label et ListBox dans une unité. Le reste dépend de la façon dont vous intégrez ce DockPanel dans le reste de l'interface utilisateur. A l'intérieur du Dockpanel externe, vous avez Dock = Right mais pas 'BottomRight' –

2

Placez les deux contrôles dans une cellule Grid et définissez la propriété Margin sur chacun d'entre eux pour les positionner absolument dans la cellule. Cela vous permettra de "coller" les deux contrôles ensemble (vous contrôlez leur taille et leur position dans la cellule, donc collé) à l'intérieur du Grid, qui fonctionnera comme le "grouper".

Vous pouvez ensuite utiliser comme vous le souhaitez (par exemple DockPanel) pour positionner la grille où vous le souhaitez. Les deux contrôles à l'intérieur bougent mais restent toujours ensemble.

Si vous n'avez pas besoin d'un positionnement absolu parfait au pixel près, la même technique fonctionnera également si vous utilisez un StackPanel au lieu d'un Grid. Dans ce cas, vous serez limité par les mises en page réalisables avec un StackPanel.

+0

Merci, donc la grille sera à l'intérieur du DockPanel? Pourquoi utiliser des positions absolues? –

+1

Coder en dur une marge semble être une mauvaise idée. Si vous codez une marge, elle ne sera pas mise à jour si la police change ou si le texte est renvoyé. De plus, vous devez deviner à la bonne marge. –

+1

@Joan: J'ai développé la réponse. – Jon

Questions connexes