2010-03-08 3 views
2

Dans un j'ai Zone de groupe Listbox, ListboxItems sont définis dans le XAML ainsi. La zone de liste est définie:WPF Listbox défiler wont verticale

<ListBox Name="lvAvoidCountry" Margin="5,5,5,5" 
    Background="Transparent" 
    ScrollViewer.VerticalScrollBarVisibility="Visible" 
    ScrollViewer.HorizontalScrollBarVisibility="Disabled" > 

Les articles sont définis comme suit:

<ListViewItem > 
    <CheckBox Name="chkAlbanien" Tag="55"> 
    <StackPanel Orientation="Horizontal"> 
     <Image Source="images/flag_albania.png" Height="30"></Image> 
     <TextBlock Text="Albanien" Margin="5,0,0,0"></TextBlock> 
    </StackPanel> 
    </CheckBox> 
</ListViewItem> 

Si je supprime les paramètres ScrollViewer j'obtenir le défilement horizontal et les éléments sont bien formatés - largeur correcte. Si j'utilise les paramètres du défilement, les éléments sont tronqués de sorte que tous les éléments sont placés dans la liste. (par exemple, le drapeau est affiché, la case à cocher est affichée mais le texte est juste "Alba").

Merci pour tous les conseils!

+0

Et qu'est-ce que vous voulez accomplir? Si vous définissez la visibilité de la barre de défilement horizontale sur désactivé, cela semble être le résultat normal. Ou est-ce que je manque quelque chose? – Timores

+0

Je veux un défilement vertical. – JerryVienna

Répondre

3

Comme son nom l'indique, le défilement horizontal ScrollViewer.HorizontalScrollBarVisibility="Disabled" désactive. Si vous faites cela, mais vos ListBoxItems sont trop longs, ils seront coupés. Le StackPanel ne se développera pas ou ne rétrécira pas pour entrer dans le ListBox, et il ne "emballera" pas vos éléments pour qu'ils rentrent dans la ListBox si elle est trop étroite, même si vous ajoutez TextWrapping au TextBlock. C'est très têtu. Je pense que votre problème principal est StackPanel.

Au lieu d'un StackPanel, essayez d'utiliser une grille avec 2 colonnes définies comme ceci:

<ListViewItem > 
    <CheckBox Name="chkAlbanien" Tag="55"> 
    <Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="Auto"/> 
      <ColumnDefinition Width="*"/> 
     </Grid.ColumnDefinitions> 
     <Image Grid.Column="0" Source="images/flag_albania.png" Height="30"/> 
     <TextBlock Grid.Column="1" 
        TextWrapping="Wrap" 
        Text="Albanien" Margin="5,0,0,0"/> 
    </Grid> 
    </CheckBox> 
</ListViewItem> 

Auto sera « shrinkwrap » les colonnes d'image et * donnera le texte tout l'espace restant. Puis ajoutez TextWrapping à votre bloc de texte au cas où il serait encore trop long.

Modifié: Ajout d'un exemple de code plus complet et a changé ma réponse légèrement.

+0

Salut, merci pour la réponse - je veux la zone de liste ressemble | ================================ | | x 1 x 2 x 3 x 4 x 5 | | x 6 x 7 x 8 x 9 x 10 | mais actuellement il "dessine" "x 6 et x 7" horizontalement vers la droite - à l'abri des regards et commence la rangée suivante avec "x 8". Je veux qu'il n'utiliser la largeur visible pour « dessiner » teh éléments et permettre défilement vertical, ... Je suppose que les ColumDefinitions je n'obtenir une colonne avec des articles ... – JerryVienna

+0

Donc vous ne voulez pas un seul listboxitem par ligne, empilé verticalement ... vous voulez que les listboxitems soient disposés horizontalement pour qu'ils "coulent" comme du texte? (Désolé, j'ai de la difficulté à visualiser ce que vous voulez.) Si vous pouviez dessiner un diagramme et l'ajouter à votre question, cela pourrait vous aider. –

0

si vous voulez défilement vertical dans une zone de liste alors ne le mettez pas dans un StackPanel, utilisez plutôt une grille.