W mojej aplikacji WPF mam Stackpanel zawierający kilka kontrolek wewnątrz nich. Jak mogę dodać pasek przewijania do tego panelu stosu.
W mojej aplikacji WPF mam Stackpanel zawierający kilka kontrolek wewnątrz nich. Jak mogę dodać pasek przewijania do tego panelu stosu.
Odpowiedzi:
Umieść to w ScrollViewer
.
Stackpanel nie ma wbudowanego mechanizmu przewijania, ale zawsze możesz zawinąć StackPanel w ScrollViewer
<ScrollViewer VerticalScrollBarVisibility="Auto">
<StackPanel ... />
</ScrollViewer>
StackPanel
implementuje IScrollInfo
i oferuje wiele metod związanych z przewijaniem. Czy na pewno nie ma żadnego „wbudowanego” mechanizmu przewijania?
Działa to tak:
<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);
W przypadku StackPanel zorientowanego poziomo jawne umieszczenie obu widoczności paska przewijania zadziałało, aby uzyskać poziomy pasek przewijania.
<ScrollViewer VerticalScrollBarVisibility="Hidden" HorizontalScrollBarVisibility="Auto" >
<StackPanel Orientation="Horizontal" />
</ScrollViewer>
Jeśli masz na myśli, że chcesz przewijać wiele elementów w panelu stosu, spróbuj umieścić wokół niego siatkę. Z definicji panel typu stackpanel ma nieskończoną długość.
Więc spróbuj czegoś takiego:
<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>
Możesz nawet sprawić, by to zadziałało za pomocą ScrollViewer