强制TextBlock包装在WPF ListBox中


94

我有一个显示消息的WPF列表框。它在左侧包含一个头像,而用户名和消息垂直堆叠在该头像的右侧。在消息文本自动换行之前,布局是可以的,但是我在列表框上看到了水平滚动条。

我已经搜索了Google,发现了类似问题的解决方案,但没有一个起作用。

<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>

Answers:


132

的内容TextBlock可以使用property包装TextWrapping。代替StackPanel使用DockPanel/ Grid。还有一个东西将ScrollViewer.HorizontalScrollBarVisibility属性设置为Disabledvalue ListBox

更新HiddenDisabled基于Matt的评论。谢谢马特。


38
我认为您需要将ScrollViewer.Horizo​​ntalScrollBarVisibility设置为“ Disabled”,而不是“ Hidden”-否则ListBox仍会尝试水平滚动,只是看不到滚动条。
马特·汉密尔顿

9

该问题可能不在ListBox中。如果其中一个父控件提供了足够的空间,则TextBlock将不会自动换行。这可能是由ScrollViewer控件引起的。


1
谢谢!在我的情况下,在列表视图中禁用水平滚动解决了ScrollViewer.Horizo​​ntalScrollBarVisibility =“ Disabled”
Ateik

2

如果要防止TextBlock增长,并且希望它刚好适合列表框的大小,则应显式设置其宽度。

为了动态更改它,它不是固定值,而是需要将其绑定到可视化树中其适当的父元素。你可以有这样的事情:

<ListBox ItemsSource="{Binding MyItems}" Name="MyListBox">

  <ListBox.Resources>
    <Style TargetType="ListBoxItem">
      <Setter Property="Width" 
              Value="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ScrollContentPresenter}, Path=ActualWidth}" />
    </Style>
  </ListBox.Resources>

  <ListBox.ItemTemplate>
    <DataTemplate>
      <TextBlock Text="{Binding Title}" TextWrapping="Wrap" />
    </DataTemplate>
  </ListBox.ItemTemplate>

</ListBox>

如果不起作用,请尝试使用Visual Studio中的“ 实时可视化树”查找正确的元素(必须绑定到什么)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.