J'ai un simple WrapPanel
qui contient un certain nombre de contrôles larges. Lorsque je redimensionne le Width
du Window
tout fonctionne comme prévu. Les contrôles vont traverser sur une seule ligne s'il y a assez d'espace ou s'enrouler à la ligne suivante quand il n'y en a pas. Cependant, ce qui doit arriver, c'est que si toutes les commandes sont empilées verticalement (puisqu'il n'y a plus d'espace horizontal) et que le Width
du Window
diminue encore plus, une barre de défilement horizontale apparaît de sorte que je peut défiler et voir le contrôle entier si je veux. Voici mon xaml. J'ai essayé d'emballer le WrapPanel
dans un ScrollViewer
mais je n'ai pas pu atteindre mon objectif.WPF wrap panel et scrolling
<Window x:Class="WpfQuotes.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="Auto" Width="600" Foreground="White">
<WrapPanel>
<Button Width="250">1</Button>
<Button Width="250">2</Button>
<Button Width="250">3</Button>
</WrapPanel>
</Window>
Donc, si vous réduisez le Width
du Window
ci-dessus à son minimum, vous ne serez pas en mesure de voir le texte des boutons. Je voudrais qu'une barre de défilement horizontale apparaisse afin que je puisse faire défiler pour voir le texte mais ne pas interférer avec la fonctionnalité d'emballage habituelle.
Merci.
Mise à jour: J'ai suivi la suggestion de Paul ci-dessous et la barre de défilement horizontale apparaît comme prévu maintenant. Cependant, je voulais aussi que le défilement vertical soit disponible, donc j'ai réglé VerticalScrollBarVisibility="Auto"
. La chose est, si je redimensionne la fenêtre de sorte qu'une barre de défilement verticale apparaît, l'horizontale apparaît toujours, même si elle n'est pas nécessaire (il y a assez d'espace horizontal pour voir le contrôle entier). Il semble que la barre de défilement verticale apparaît en train de jouer avec la largeur du scrollviewer. Y a-t-il un moyen de corriger cela afin que la barre de défilement horizontale n'apparaisse que si elle est vraiment nécessaire?
Ci-dessous mon XAML et le code que j'ai ajouté dans le CustomWrapPanel
:
<Window x:Class="Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:cwp="clr-namespace:CustomWrapPanelExample"
Title="Window1" Height="Auto" Width="300" Foreground="White" Name="mainPanel">
<ScrollViewer x:Name="MyScrollViewer" HorizontalScrollBarVisibility="Auto"
VerticalScrollBarVisibility="Auto">
<cwp:CustomWrapPanel Width="{Binding ElementName=MyScrollViewer, Path=ActualWidth}">
<Button Width="250">1</Button>
<Button Width="250">2</Button>
<Button Width="250">3</Button>
<Button Width="250">4</Button>
<Button Width="250">5</Button>
<Button Width="250">6</Button>
<Button Width="250">7</Button>
<Button Width="250">8</Button>
<Button Width="250">9</Button>
</cwp:CustomWrapPanel>
</ScrollViewer>
</Window>
La seule chose de substitution dans CustomWrapPanel
:
protected override Size MeasureOverride(Size availableSize)
{
double maxChildWidth = 0;
if (Children.Count > 0)
{
foreach (UIElement el in Children)
{
if (el.DesiredSize.Width > maxChildWidth)
{
maxChildWidth = el.DesiredSize.Width;
}
}
}
MinWidth = maxChildWidth;
return base.MeasureOverride(availableSize);
}
pouvez-vous poster le XAML avec le ScrollViewer? – hackerhasid