Come aggiungere una ScrollBar a uno Stackpanel


106

Nella mia applicazione WPF, ho uno Stackpanel contenente diversi controlli al loro interno. Come posso aggiungere una barra di scorrimento a questo stackpanel.

Risposte:


162

Mettilo in un file ScrollViewer.


Grazie. Dopo aver inserito uno ScrollViewer attorno ad esso, l'intero contenuto non viene visualizzato. Ho provato a impostare Altezza e Larghezza su Auto, ma senza fortuna. Perché dovrebbe essere mostrata solo una parte limitata?
Shamim Hafiz

5
Non ho idea. La tua domanda era lunga due frasi, un piccolo dettaglio per anticipare eventuali problemi.
Joey

Capito, stavo posizionando il tag di apertura nel posto sbagliato. Grazie mille per l'aiuto.
Shamim Hafiz

Risposta semplice e perfetta.
David Piao,

94

Stackpanel non ha un meccanismo di scorrimento integrato, ma puoi sempre avvolgere StackPanel in uno ScrollViewer

<ScrollViewer VerticalScrollBarVisibility="Auto">
  <StackPanel ... />
</ScrollViewer>

3
Bene, StackPanelimplementa IScrollInfoe offre una serie di metodi relativi allo scorrimento. Sei sicuro che non abbia alcun tipo di meccanismo di scorrimento "integrato"?
O Mapper

4
da msdn.microsoft.com/en-us/library/… ... "Questa proprietà non è destinata all'uso nel codice. Viene esposta pubblicamente per soddisfare un contratto di interfaccia (IScrollInfo). L'impostazione di questa proprietà non ha alcun effetto. Se è necessario lo scorrimento fisico anziché lo scorrimento logico, racchiudere lo StackPanel in uno ScrollViewer e impostare la relativa proprietà CanContentScroll su false. "
Skinner

11

Funziona così:

<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

Per StackPanel orientato orizzontalmente, l'inserimento esplicito di entrambe le visibilità della barra di scorrimento ha funzionato per me per ottenere la barra di scorrimento orizzontale.

    <ScrollViewer VerticalScrollBarVisibility="Hidden" HorizontalScrollBarVisibility="Auto" >
        <StackPanel Orientation="Horizontal" />
    </ScrollViewer>

1
Ripeti le risposte precedenti.
vapcguy

-4

Se intendi scorrere più elementi nel tuo stackpanel, prova a mettere una griglia attorno ad esso. Per definizione, uno stackpanel ha una lunghezza infinita.

Quindi prova qualcosa di simile:

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

Potresti persino farlo funzionare con uno ScrollViewer


4
Questo codice viene estratto dal contesto. Potresti rimuovere le dipendenze, quindi il codice è utilizzabile senza ulteriori modifiche?
Markus Jarderot
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.