В моем приложении WPF у меня есть Stackpanel, содержащий несколько элементов управления внутри. Как я могу добавить полосу прокрутки к этой панели стека.
В моем приложении WPF у меня есть Stackpanel, содержащий несколько элементов управления внутри. Как я могу добавить полосу прокрутки к этой панели стека.
Ответы:
Поместите это в файл ScrollViewer
.
Stackpanel не имеет встроенного механизма прокрутки, но вы всегда можете обернуть StackPanel в ScrollViewer
<ScrollViewer VerticalScrollBarVisibility="Auto">
<StackPanel ... />
</ScrollViewer>
StackPanel
реализует IScrollInfo
и предлагает ряд методов, связанных с прокруткой. Вы уверены, что в нем нет какого-то «встроенного» механизма прокрутки?
Это работает так:
<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);
Для горизонтально ориентированной StackPanel явное добавление видимости обеих полос прокрутки помогло мне получить горизонтальную полосу прокрутки.
<ScrollViewer VerticalScrollBarVisibility="Hidden" HorizontalScrollBarVisibility="Auto" >
<StackPanel Orientation="Horizontal" />
</ScrollViewer>
Если вы имеете в виду, что хотите прокрутить несколько элементов в панели стека, попробуйте обвести ее сеткой. По определению стековая панель имеет бесконечную длину.
Так что попробуйте что-нибудь вроде этого:
<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>
Вы даже можете сделать это с помощью ScrollViewer