2009-01-27 8 views
32

J'ai un ListBox databound et itemtemplated:ListBox avec ItemTemplate

<ListBox x:Name="lbLista" 
     ScrollViewer.VerticalScrollBarVisibility="Visible"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
     <StackPanel Orientation="Horizontal"> 
      <CheckBox IsChecked="{Binding Deleteable, Mode=TwoWay}" /> 
      <Label Content="{Binding Name}" /> 
     </StackPanel> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

Les ites montrent bien et ils viennent d'un ObservableCollection.

Le problème est le scrollbar qui apparaît, mais n'est pas utilisable - il ne dispose pas d'une poignée à saisir. J'ai essayé de définir certaines propriétés attachées ScrollView sur ListBox, mais elles n'affectent pas la situation.

Répondre

30

J'ai collé votre code dans un projet de test, ajouté environ 20 éléments et j'ai obtenu des barres de défilement utilisables, pas de problème, et ils fonctionnent comme prévu. Lorsque je n'ajoute que quelques éléments (de sorte que le défilement n'est pas nécessaire), je n'ai pas de barre de défilement utilisable. Cela pourrait-il être le cas? que vous n'ajoutez pas assez d'articles?

Si vous supprimez le ScrollViewer.VerticalScrollBarVisibility="Visible", les barres de défilement n'apparaissent que lorsque vous en avez besoin.

9
ListBox

va essayer de se développer en hauteur est disponible .. Lorsque vous définissez la propriété Height de ListBox vous obtenez un ScrollViewer qui fonctionne réellement ...

Si vous souhaitez que votre ListBox accodate la hauteur disponible, pourrait vouloir essayer de régler la hauteur de vos contrôles parent .. dans une grille, par exemple, le réglage de la hauteur Auto dans votre RowDefinition pourrait faire l'affaire ...

HTH

0

Thnaks pour la réponse. Je l'ai essayé moi-même aussi pour un projet vide et - voilà tout puissant créateur de paradis et de sept mers - ça a marché. Au départ, j'avais ListBox à l'intérieur de la racine. Pour une raison quelconque, ListBox n'aime pas être à l'intérieur de StackPanel, du tout! =)

-pom-

+7

Vous devriez vraiment accepter la réponse originale qui vous aidera, et non votre propre confirmation. :-) –

+0

Crédit où créance est due et tout ça ... –

4

Je n'ai jamais eu de chance avec tout contenu scrollable placé à l'intérieur d'un StackPanel (quoi que ce soit dérivé de ScrollableContainer. StackPanel a un mécanisme de mise en page bizarre qui confond les contrôles enfants lorsque l'opération de mesure est terminée et j'ai trouvé que la taille verticale finit par être infinie, donc non contrainte - donc elle dépasse les limites du conteneur et finit par être coupée.

Vous devez toujours placer le contenu défilant à l'intérieur d'un conteneur pouvant se résoudre à une hauteur connue pendant son opération de mise en page lors de l'exécution. que les barres de défilement sont de taille appropriée. Le conteneur parent dans l'arborescence visuelle doit être capable de résoudre une hauteur réelle, et cela se produit dans la grille si vous définissez la hauteur de la RowDefinition o sur auto ou fixed.

Cela se produit également dans Silverlight.

-em-

Questions connexes