Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Force TextBlock to wrap in WPF ListBox

I have a WPF listbox which displays messages. It contains an avatar on the left side and the username and message stacked vertically to the right of the avatar. The layout is fine until the message text should word wrap, but instead I get a horizontal scroll bar on the listbox.

I've Googled and found solutions to similar issues, but none of them worked.

<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> 
like image 203
Eric Haskins Avatar asked Dec 29 '08 07:12

Eric Haskins


2 Answers

Contents of the TextBlock can be wrapped using property TextWrapping. Instead of StackPanel, use DockPanel/Grid. One more thing - set ScrollViewer.HorizontalScrollBarVisibility property to Disabled value for the ListBox.

Updated Hidden to Disabled based on comment from Matt. Thanks Matt.

like image 50
Nash Avatar answered Sep 28 '22 04:09

Nash


The problem might not be located in the ListBox. The TextBlock won't wrap, if one of the parent controls provides enough space, so that it hasn't the need to wrap. This might be caused by a ScrollViewer control.

like image 40
Martin Moser Avatar answered Sep 28 '22 03:09

Martin Moser