You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

WPF中启用TextWrapping的TextBox无法显示垂直滚动条问题求助

解决WPF TextBox垂直滚动条不显示的问题

哈哈,这个场景我之前踩过坑!咱们一步步来搞定它~

为啥滚动条不出来?

你的问题其实是两个关键设置导致的:

  1. TextBox所在的Grid列宽度是auto:这会让TextBox的宽度跟着文本无限拉长,TextWrapping="Wrap"根本没机会触发换行——文本一直横向走,自然不会有高度溢出,滚动条当然不会出现。
  2. TextBox的VerticalAlignment="Center":就算哪天文本真的换行了,这个设置会让TextBox只保持内容本身的高度,不会填充Grid行的可用空间。一旦内容超出父容器高度,直接被截断,轮不到滚动条干活。

具体怎么改?

第一步:让文本能换行(限制宽度)

要么把TextBox所在的列从auto改成*,让它占用剩余空间,这样文本到了边界就会自动换行:

<Grid.ColumnDefinitions>
    <ColumnDefinition Width="auto"/>
    <ColumnDefinition Width="*"/> <!-- 这里把auto换成* -->
    <ColumnDefinition Width="auto"/>
    <ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>

要是你想保留列宽为auto,那就给TextBox加个MaxWidth,比如MaxWidth="300",强制文本在指定宽度内换行。

第二步:让TextBox能“撑满”垂直空间

把TextBox的VerticalAlignmentCenter改成Stretch,这样它会填充满Grid行的可用高度,当内容高度超过TextBox的高度时,滚动条就会自动弹出来:

<TextBox Grid.Column="1" 
         Style="{StaticResource TextBlockStyle}" 
         VerticalScrollBarVisibility="Auto" 
         HorizontalAlignment="Left" 
         Margin="5" 
         Text="{Binding Path=Text}" 
         Foreground="{Binding Path=ForegroundColor}"
         VerticalAlignment="Stretch"> <!-- 改这里 -->
</TextBox>

第三步:给父容器加高度限制

如果你的Grid或者UserControl没有设置MaxHeight或者固定高度,TextBox会一直往下延伸(因为Grid行是Auto高度),永远不会触发滚动条。所以给Grid加个MaxHeight,比如:

<Grid Height="auto" MaxHeight="200"> <!-- 加个最大高度 -->

改完后的完整代码参考

样式部分不变,Grid和TextBox调整后:

<Grid Height="auto" MaxHeight="200">
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="auto"/>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Width="auto"/>
        <ColumnDefinition Width="*"/>
    </Grid.ColumnDefinitions>
    <TextBox Grid.Column="1" 
             Style="{StaticResource TextBlockStyle}" 
             VerticalScrollBarVisibility="Auto" 
             HorizontalAlignment="Left" 
             Margin="5" 
             Text="{Binding Path=Text}" 
             Foreground="{Binding Path=ForegroundColor}"
             VerticalAlignment="Stretch">
    </TextBox>
</Grid>

这样调整后,文本会乖乖换行,内容超过高度时滚动条就正常显示啦!

内容的提问来源于stack exchange,提问作者Willy

火山引擎 最新活动