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?

Antworten:


162

Legen Sie es in eine ScrollViewer.


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>

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);

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>

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


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.