2008-12-29 24 views
88

我有一个显示消息的WPF列表框。它包含左侧的头像和垂直堆叠在头像右侧的用户名和消息。布局很好,直到消息文本应该换行,但是我在列表框上得到了一个水平滚动条。强制TextBlock包装在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> 

回答

120

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

更新HiddenDisabled根据来自Matt的评论。谢谢马特。

+36

我认为你需要将ScrollViewer.Horizo​​ntalScrollBarVisibility设置为“Disabled”而不是“Hidden” - 否则ListBox仍然会尝试水平滚动,只是不会看到滚动条。 – 2008-12-29 08:03:18

8

该问题可能不在列表框中。如果其中一个父控件提供了足够的空间,则TextBlock不会换行,因此它不需要换行。这可能是由ScrollViewer控件造成的。

+0

谢谢!在我的情况下禁用在列表视图中的水平滚动修复问题ScrollViewer.Horizo​​ntalScrollBarVisibility =“禁用” – Ateik 2016-02-08 18:11:22

0

如果要防止TextBlock增长,并且希望它只适合列表框的大小,则应该明确设置它的宽度。

为了动态改变它,它不是一个固定值,但你需要将它绑定到它在视觉树中的适当的父元素。你可以有这样的事情:在Visual Studio中实况视觉树

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

如果它不工作,试图找到合适的元素(这必须被绑定到什么)。