So fügen Sie einem Stackpanel eine ScrollBar hinzu

105

In meiner WPF-Anwendung befindet sich ein Stackpanel mit mehreren Steuerelementen. Wie kann ich diesem Stackpanel eine Bildlaufleiste hinzufügen?

Shamim Hafiz
quelle

Antworten:

162

Legen Sie es in eine ScrollViewer.

Joey
quelle
Vielen Dank. Nachdem Sie einen ScrollViewer darum gelegt haben, wird nicht der gesamte Inhalt angezeigt. Ich habe versucht, Höhe und Breite auf Auto zu setzen, aber kein Glück. Warum sollte nur ein begrenzter Teil zeigen?
Shamim Hafiz
5
Ich habe keine Ahnung. Ihre Frage war zwei Sätze lang, was ein wenig detailliert ist, um mögliche Probleme zu antizipieren.
Joey
Verstanden, ich habe das Eröffnungsetikett an der falschen Stelle platziert. Vielen Dank für die Hilfe.
Shamim Hafiz
Einfache und perfekte Antwort.
David Piao
93

In Stackpanel ist kein Bildlaufmechanismus integriert, aber Sie können das StackPanel jederzeit in einen ScrollViewer einbinden

<ScrollViewer VerticalScrollBarVisibility="Auto">
  <StackPanel ... />
</ScrollViewer>
Biju
quelle
3
Nun, StackPanelimplementiert IScrollInfound bietet eine Reihe von Methoden zum Scrollen. Sind Sie sicher, dass es keinen "eingebauten" Bildlaufmechanismus gibt?
ODER Mapper
4
from msdn.microsoft.com/en-us/library/… ... "Diese Eigenschaft ist nicht für die Verwendung in Ihrem Code vorgesehen. Sie wird öffentlich zur Erfüllung eines Schnittstellenvertrags (IScrollInfo) verfügbar gemacht. Das Festlegen dieser Eigenschaft hat keine Auswirkung. Wenn Sie benötigen physisches Scrollen anstelle von logischem Scrollen, wickeln das StackPanel in einen ScrollViewer ein und setzen seine CanContentScroll-Eigenschaft auf false. "
Skinner
11

Es funktioniert so:

<ScrollViewer VerticalScrollBarVisibility="Visible" HorizontalScrollBarVisibility="Disabled" Width="340" HorizontalAlignment="Left" Margin="12,0,0,0">
        <StackPanel Name="stackPanel1" Width="311">

        </StackPanel>
</ScrollViewer>

TextBox tb = new TextBox();
tb.TextChanged += new TextChangedEventHandler(TextBox_TextChanged);
stackPanel1.Children.Add(tb);
Arnisz
quelle
0

Bei horizontal ausgerichtetem StackPanel funktionierte es für mich, die beiden Sichtbarkeiten der Bildlaufleiste explizit zu setzen, um die horizontale Bildlaufleiste zu erhalten.

    <ScrollViewer VerticalScrollBarVisibility="Hidden" HorizontalScrollBarVisibility="Auto" >
        <StackPanel Orientation="Horizontal" />
    </ScrollViewer>
VijayKP
quelle
1
Wiederholung vorheriger Antworten.
Vapcguy
-4

Wenn Sie meinen, Sie möchten durch mehrere Elemente in Ihrem Stapelfenster scrollen, versuchen Sie, ein Raster darum zu legen. Per Definition hat ein Stackpanel eine unendliche Länge.

Probieren Sie so etwas aus:

   <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
        <StackPanel Width="311">
              <TextBlock Text="{Binding A}" TextWrapping="Wrap" Style="{StaticResource PhoneTextExtraLargeStyle}" FontStretch="Condensed" FontSize="28" />
              <TextBlock Text="{Binding B}" TextWrapping="Wrap" Margin="12,-6,12,0" Style="{StaticResource PhoneTextSubtleStyle}"/>
        </StackPanel>
    </Grid>

Sie können dies sogar mit einem ScrollViewer zum Laufen bringen

Freakishly
quelle
4
Dieser Code wird aus dem Kontext genommen. Könnten Sie die Abhängigkeiten entfernen, damit der Code ohne weitere Änderungen verwendet werden kann?
Markus Jarderot