2008-12-29 58 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> 

如果它不工作,試圖找到合適的元素(這必須被綁定到什麼)。