如何让Grid单元格内的ScrollViewer同时支持水平和垂直滚动?
问题:WPF ScrollViewer仅垂直滚动正常,水平滚动条不显示
Grid单元格内的长字符串无法触发水平滚动,仅垂直滚动功能正常。
原因分析
- ScrollViewer默认
HorizontalScrollBarVisibility属性值为Disabled,未启用水平滚动机制 - TextBlock默认开启文本自动换行(
TextWrapping="Wrap"),长文本会被自动折行,不会超出容器宽度,因此无法触发水平滚动
解决步骤
- 给ScrollViewer添加
HorizontalScrollBarVisibility="Auto",让水平滚动条在内容超出容器宽度时自动显示 - 给TextBlock设置
TextWrapping="NoWrap",禁止文本自动换行,确保长文本会超出容器宽度以触发滚动
修改后的XAML代码
<Window x:Class="WpfApp1.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="150" Width="250"> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="200"/> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition Height="100"/> </Grid.RowDefinitions> <ScrollViewer Grid.Row="0" Grid.Column="0" HorizontalScrollBarVisibility="Auto"> <ItemsControl ItemsSource="{Binding Path=BoundTexts}"> <ItemsControl.ItemTemplate> <DataTemplate> <TextBlock Text="{Binding Path=Text}" TextWrapping="NoWrap"/> </DataTemplate> </ItemsControl.ItemTemplate> <ItemsControl.ItemsPanel> <ItemsPanelTemplate> <StackPanel Orientation="Vertical"/> </ItemsPanelTemplate> </ItemsControl.ItemsPanel> </ItemsControl> </ScrollViewer> </Grid> </Window>
后台代码无需修改,保持原有逻辑即可。
内容的提问来源于stack exchange,提问作者user20943029
相关产品推荐
相关产品推荐

