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.