2009-08-12 7 views
2

J'ai une zone de liste qui a une certaine largeur fixe. Le nombre d'éléments dans la zone de liste varie. Est-il possible de centrer le contenu de la zone de liste? Le "Content Presenter" de ListBoxItem, centre chaque élément dans son Template au lieu de le centrer par rapport à la largeur de la listbox entière.centre aligner le contenu d'une zone de liste dans silverlight

Désolé de ne pas avoir répondu plus tôt. Le problème était avec la largeur du ItemsPanelTemplate que j'utilisais dans ma Listbox. La largeur antérieure a été définie à 925. Modification de cette largeur à MaxWidth travaillé. Le code:

<ItemsPanelTemplate x:Key="ItemsPanelKey"> 
     <Contact:AnimatedWrapPanel HorizontalAlignment="Center" MaxWidth="925"> 
      <Contact:AnimatedWrapPanel.Interpolation> 
       <interpolate:BackInterpolation Amplitude=".5" Suppression=".2" EdgeBehavior="5"/> 
      </Contact:AnimatedWrapPanel.Interpolation> 
     </Contact:AnimatedWrapPanel> 

    </ItemsPanelTemplate> 

Répondre

0

Vous ne savez pas exactement ce que vous voulez faire, mais c'est un modèle d'élément personnalisé qui centre chaque élément. Si j'ai raison, la seule chose délicate est que le template doit avoir la même largeur fixe que la listbox. Donc, si votre zone de liste contient un objet Foo et Foo.Text est un simple propriété de texte à afficher, vous pouvez le faire comme cela en XAML:

<ListBox x:Name="TheListBox" Width="300"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
     <Grid Width="300"> 
      <TextBlock Text="{Binding Text}" HorizontalAlignment="Center" /> 
     </Grid> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
    </ListBox> 

et le code contient derrière quelque chose comme:

List<Foo> ListOfFoo = new List<Foo>(); 
ListOfFoo.Add(new Foo(){Text="Something"}); 
ListOfFoo.Add(new Foo(){Text="Something Else"}); 
ListOfFoo.Add(new Foo(){Text="Something Completely Different"}); 

TheListBox.ItemsSource = ListOfFoo; 

Si c'est plus complexe ou que vous ne pouvez pas le faire fonctionner, postez du code et nous partirons de là.

+0

Mon mauvais. Les éléments de la zone de liste sont disposés horizontalement et fonctionnent normalement. Mais j'ai un panneau de retour comme le ItemsPanelTemplate. Lorsque je ne définis pas la largeur de ce panneau d'habillage, les éléments de la liste sont alignés horizontalement de manière centralisée. Cependant, si je définis la largeur pour m'assurer que s'il y a plus d'éléments qu'ils enveloppent, dans le cas d'un nombre inférieur d'éléments, les éléments sont alignés sur la gauche. J'ai défini la propriété Horizontal alignment au centre pour le panneau de retour à la ligne. –

+1

Pourriez-vous poster le xaml que vous utilisez? – Raumornie

Questions connexes