Ich habe eine einfache WrapPanel
, die eine Reihe von breiten Steuerelementen enthält. Wenn ich die Width
der Window
Größe verändere, funktioniert alles wie erwartet. Die Steuerelemente werden in einer einzigen Zeile angezeigt, wenn genügend Speicherplatz vorhanden ist, oder wenn die nächste Zeile nicht mehr angezeigt wird.WPF Wrap Panel und Scrollen
Was ich jedoch tun muss ist, dass, wenn alle Steuerelemente im Grunde vertikal gestapelt sind (da es keinen horizontalen Platz mehr gibt) und der Width
von Window
noch mehr verringert wird, erscheint eine horizontale Bildlaufleiste, so dass ich kann scrollen und die gesamte Kontrolle sehen, wenn ich will. Unten ist mein Xaml. Ich habe versucht, die WrapPanel
in eine ScrollViewer
Verpackung, aber ich konnte mein Ziel nicht erreichen.
<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>
Also, wenn Sie die Width
der oben Window
auf ihr Minimum zu reduzieren, werden Sie nicht in der Lage sein, den Text der Schaltflächen zu sehen. Ich möchte eine horizontale Bildlaufleiste erscheinen lassen, damit ich scrollen kann, um den Text zu sehen, aber nicht die übliche Umbruchfunktionalität stört.
Danke.
Update: Ich habe Pauls Vorschlag unten gefolgt und die horizontale Bildlaufleiste erscheint jetzt wie erwartet. Ich wollte aber auch vertikales Scrollen, also setze ich VerticalScrollBarVisibility="Auto"
. Die Sache ist, wenn ich das Fenster so skaliere, dass eine vertikale Bildlaufleiste erscheint, erscheint auch immer die horizontale, auch wenn sie nicht benötigt wird (es gibt genug horizontalen Platz, um das gesamte Steuerelement zu sehen). Es sieht so aus, als würde die vertikale Bildlaufleiste mit der Breite des Scrollviewers in Konflikt geraten. Gibt es eine Möglichkeit, dies zu korrigieren, so dass die horizontale Bildlaufleiste nicht angezeigt wird, wenn sie tatsächlich benötigt wird?
Unten finden Sie meine XAML und der einzige Code, den ich in der CustomWrapPanel
hinzugefügt:
<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>
Das einzige, was in CustomWrapPanel
außer Kraft gesetzt:
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);
}
können Sie den XAML mit dem ScrollViewer veröffentlichen? – hackerhasid