如何使ListBox内的TextBlock随窗口水平自适应大小并自动换行
解决方案
问题根源
你的问题本质是ListBox默认的滚动查看器允许水平方向无限延伸,内部元素的宽度计算会优先匹配内容本身的宽度,而非ListBox的可视区域宽度,因此你设置的星号比例布局无法生效,TextBlock没有宽度限制自然不会触发换行。
解决方法
你只需要给ListBox添加ScrollViewer.HorizontalScrollBarVisibility="Disabled"属性,禁用水平滚动能力即可。该设置不会影响垂直滚动的正常使用,同时会强制内部内容的宽度和ListBox可视宽度保持一致,你的1:20比例布局会自动按容器宽度计算,TextBlock超出宽度时就会自动换行。
修改后的核心代码示例:
<ListBox x:Name="AnnotationsList" ScrollViewer.VerticalScrollBarVisibility="Visible" ScrollViewer.HorizontalScrollBarVisibility="Disabled" Grid.Row="1" Grid.ColumnSpan="3"> <!-- 其余模板内容保持不变 --> <ListBox.ItemTemplate> <DataTemplate> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="1*"/> <ColumnDefinition Width="20*"/> </Grid.ColumnDefinitions> <Label Content="{Binding DateAdded}" Grid.Column="0"/> <TextBlock Text="{Binding Description}" TextWrapping="Wrap" Grid.Column="1"/> </Grid> </DataTemplate> </ListBox.ItemTemplate> </ListBox>
可选优化
如果修改后发现条目内容没有完全占满ListBox的宽度,可以额外给ListBox添加条目容器样式,强制内容横向拉伸:
<ListBox.ItemContainerStyle> <Style TargetType="ListBoxItem"> <Setter Property="HorizontalContentAlignment" Value="Stretch"/> </Style> </ListBox.ItemContainerStyle>
内容的提问来源于stack exchange,提问作者viraptor
相关产品推荐
相关产品推荐

