En mi aplicación WPF, tengo un Stackpanel que contiene varios controles dentro de ellos. ¿Cómo puedo agregar una barra de desplazamiento a este panel de pila?
En mi aplicación WPF, tengo un Stackpanel que contiene varios controles dentro de ellos. ¿Cómo puedo agregar una barra de desplazamiento a este panel de pila?
Respuestas:
Ponlo en un ScrollViewer
.
Stackpanel no tiene un mecanismo de desplazamiento integrado, pero siempre puede envolver el StackPanel en un ScrollViewer
<ScrollViewer VerticalScrollBarVisibility="Auto">
<StackPanel ... />
</ScrollViewer>
StackPanel
implementa IScrollInfo
y ofrece una serie de métodos relacionados con el desplazamiento. ¿Estás seguro de que no tiene ningún tipo de mecanismo de desplazamiento "incorporado"?
Funciona así:
<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);
Para StackPanel orientado horizontalmente, poner explícitamente ambas visibilidades de la barra de desplazamiento funcionó para mí para obtener la barra de desplazamiento horizontal.
<ScrollViewer VerticalScrollBarVisibility="Hidden" HorizontalScrollBarVisibility="Auto" >
<StackPanel Orientation="Horizontal" />
</ScrollViewer>
Si quiere decir que desea desplazarse por varios elementos en su panel de pila, intente poner una cuadrícula alrededor. Por definición, un panel de pila tiene una longitud infinita.
Así que prueba algo como esto:
<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>
Incluso podría hacer que esto funcione con un ScrollViewer