Em meu aplicativo WPF, tenho um Stackpanel contendo vários controles dentro deles. Como posso adicionar uma barra de rolagem a este painel de pilha.
Em meu aplicativo WPF, tenho um Stackpanel contendo vários controles dentro deles. Como posso adicionar uma barra de rolagem a este painel de pilha.
Respostas:
Coloque-o em um ScrollViewer
.
Stackpanel não tem mecanismo de rolagem integrado, mas você sempre pode envolver o StackPanel em um ScrollViewer
<ScrollViewer VerticalScrollBarVisibility="Auto">
<StackPanel ... />
</ScrollViewer>
StackPanel
ele implementa IScrollInfo
e oferece vários métodos relacionados à rolagem. Tem certeza de que ele não possui nenhum tipo de mecanismo de rolagem "embutido"?
Funciona assim:
<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, colocar explicitamente ambas as visibilidades da barra de rolagem funcionou para mim para obter a barra de rolagem horizontal.
<ScrollViewer VerticalScrollBarVisibility="Hidden" HorizontalScrollBarVisibility="Auto" >
<StackPanel Orientation="Horizontal" />
</ScrollViewer>
Se você quer rolar por vários itens em seu painel de pilha, tente colocar uma grade ao redor dele. Por definição, um stackpanel tem comprimento infinito.
Então, tente algo assim:
<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>
Você pode até mesmo fazer isso funcionar com um ScrollViewer