J'ai un ListBox WPF qui affiche généralement 4 ou 5 éléments. Pour mon application, cela signifie que je n'ai presque jamais besoin d'afficher une barre de défilement (il y a assez d'espace). Cependant, au cas où il y aurait plus d'éléments dans la liste, j'ai besoin d'afficher la barre de défilement verticale, mais par conséquent mon contenu a moins d'espace et n'a plus l'air sympa sur un "backdrop" que j'ai créé derrière la liste. J'aime réserver la pièce dans ma disposition pour que la barre de défilement apparaisse. Y-a-t-il un moyen de faire ça? (peut-être avoir la barre de défilement superposée sur le contenu)La barre de défilement de ListView gâche ma mise en page
Répondre
D'accord, trouvé une solution.
J'ai créé un nouveau style par défaut pour le ScrollViewer en suivant this MSDN article. Ensuite, j'ai changé la partie où les barres de défilement sont placées.
comportement original
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Border Grid.Row="0" Grid.Column="1">
<ScrollContentPresenter CanContentScroll="True" Content="{TemplateBinding ScrollViewer.Content}" />
</Border>
<ScrollBar Orientation="Vertical" Grid.Row="0" Grid.Column="0" Minimum="0" Maximum="{TemplateBinding ScrollViewer.ScrollableHeight}" Value="{TemplateBinding ScrollViewer.VerticalOffset}" ViewportSize="{TemplateBinding ScrollViewer.ViewportHeight}" Name="PART_VerticalScrollBar" Visibility="{TemplateBinding ScrollViewer.ComputedVerticalScrollBarVisibility}" />
<ScrollBar Orientation="Horizontal" Grid.Row="1" Grid.Column="1" Minimum="0" Maximum="{TemplateBinding ScrollViewer.ScrollableWidth}" Value="{TemplateBinding ScrollViewer.HorizontalOffset}" ViewportSize="{TemplateBinding ScrollViewer.ViewportWidth}" Name="PART_HorizontalScrollBar" Visibility="{TemplateBinding ScrollViewer.ComputedHorizontalScrollBarVisibility}"/>
</Grid>
Nouveau comportement
<Grid>
<!-- Presentation below is different from the default: the scrollbar is overlayed on the content. -->
<ScrollContentPresenter CanContentScroll="True" Content="{TemplateBinding ScrollViewer.Content}" />
<ScrollBar Orientation="Vertical" HorizontalAlignment="Right" Minimum="0" Maximum="{TemplateBinding ScrollViewer.ScrollableHeight}" Value="{TemplateBinding ScrollViewer.VerticalOffset}" ViewportSize="{TemplateBinding ScrollViewer.ViewportHeight}" Name="PART_VerticalScrollBar" Visibility="{TemplateBinding ScrollViewer.ComputedVerticalScrollBarVisibility}" />
<ScrollBar Orientation="Horizontal" VerticalAlignment="Bottom" Minimum="0" Maximum="{TemplateBinding ScrollViewer.ScrollableWidth}" Value="{TemplateBinding ScrollViewer.HorizontalOffset}" ViewportSize="{TemplateBinding ScrollViewer.ViewportWidth}" Name="PART_HorizontalScrollBar" Visibility="{TemplateBinding ScrollViewer.ComputedHorizontalScrollBarVisibility}"/>
</Grid>
Maintenant, les barres de défilement sont superposées sur le contenu afin qu'ils ne prennent pas plus d'espace quand il est visible. Bien sûr, le contenu devrait maintenant réserver de l'espace pour le contenu.
Qu'en est-il d'envelopper avec un ScrollViewr?
<ScrollViewer VerticalScrollBarVisibility="Auto">
<!-- your ListBoxHere -->
</ScrollViewer>
Cela ne résout pas mon problème, la barre de défilement prend encore l'espace –
Comme vous l'avez dit dans votre question, il vous suffit de réserver la largeur de la barre de défilement verticale, le code XAML suivant vous donnera une idée.
<ScrollViewer VerticalScrollBarVisibility="Auto">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="30"/> <!-- reserved for the vertical scrollbar -->
</Grid.ColumnDefinitions>
<Listbox .../>
</Grid>
</ScrollViewer>
- 1. Comment obtenir la hauteur de la barre de défilement horizontale dans un ListView
- 2. problèmes de mise en page de base avec WPF ListView
- 3. Barre de défilement QScintilla
- 4. MSXML2 :: IXMLDOMDocument2Ptr-> GetXML() gâche ma chaîne!
- 5. problème de barre de défilement
- 6. Est-il possible d'avoir un bas de page avec une barre de défilement horizontale et aucune barre de défilement verticale?
- 7. action de barre de défilement en java
- 8. Détecter lorsque la barre de défilement de la liste de contrôle WPF est en bas?
- 9. UITableView défilement sous la barre de navigation
- 10. Barre de défilement Tbody
- 11. WPF barre de défilement
- 12. Personnalisation de la barre de défilement
- 13. Barre de défilement du navigateur
- 14. barre de défilement verticale iframe
- 15. Comment redimensionner correctement la barre de défilement lorsque la collection sous-jacente d'un WPF ListView change?
- 16. Mise en page Android centrée dans RelativeLayout pour custom ListView
- 17. html sélectionner la barre de défilement
- 18. Modifier la largeur d'une barre de défilement
- 19. comment supprimer la barre de défilement horizontale dans listview dans le cadre compact .net
- 20. Activation de la barre de défilement dans WPF
- 21. C# Listview trier avec succès mais en essayant de déplacer la barre de défilement vers le haut ... comment?
- 22. CSS ou JQuery barre latérale fixe dans la mise en page du site
- 23. Comment puis-je obtenir une mise en page de pages remplies sans défilement dans ASP?
- 24. déplacer le div en fonction de la barre de défilement de la fenêtre
- 25. Barre de défilement horizontale dans IE6
- 26. Définition de la barre de défilement sur un JScrollPane
- 27. Désactiver la barre de défilement dans MDI Parent
- 28. Ajax mise à jour de la barre de défilement du panneau numéro
- 29. HTML Divs, colonnes, barre de défilement horizontale
- 30. désactiver la barre de défilement sur le div
L'inconvénient est que les barres de défilement apparaîtront au-dessus du contenu et peut-être obscure partie. –