强制TextBlock在WPF ListBox中换行

Eri*_*ins 93 wpf listbox textblock word-wrap

我有一个显示消息的WPF列表框.它包含左侧的头像和垂直堆叠在头像右侧的用户名和消息.布局很好,直到消息文本应自动换行,但我在列表框上得到一个水平滚动条.

我用谷歌搜索并找到了类似问题的解决方案,但都没有奏效.

<ListBox HorizontalContentAlignment="Stretch"  ItemsSource="{Binding Path=FriendsTimeline}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <Border BorderBrush="DarkBlue" BorderThickness="3" CornerRadius="2" Margin="3" >
                    <Image Height="32" Width="32"  Source="{Binding Path=User.ProfileImageUrl}"/>
                </Border>
                <StackPanel Orientation="Vertical">
                    <TextBlock Text="{Binding Path=User.UserName}"/>
                    <TextBlock Text="{Binding Path=Text}" TextWrapping="WrapWithOverflow"/> <!-- This is the textblock I'm having issues with. -->
                </StackPanel>
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>
Run Code Online (Sandbox Code Playgroud)

Nas*_*ash 131

TextBlock可以使用属性包装内容TextWrapping.而不是StackPanel,使用DockPanel/ Grid.还有一件事 - 将ScrollViewer.HorizontalScrollBarVisibility属性设置为Disabled值的值ListBox.

更新HiddenDisabled基于马特评论.谢谢马特.

  • 我认为你需要将ScrollViewer.Horizo​​ntalScrollBarVisibility设置为"Disabled"而不是"Hidden" - 否则ListBox仍然会尝试水平滚动,你只是看不到滚动条. (37认同)

Mar*_*ser 9

问题可能不在ListBox中.如果其中一个父控件提供了足够的空间,TextBlock将不会换行,因此它不需要换行.这可能是由ScrollViewer控件引起的.