Search code examples
windows-phone-7xamltextblock

display a long text inside a textblock on two lines


I have a listbox which contains a textblock and an image. I want if the text is too long it goes to a second line. At the moment only have of the text is visible. Here is my XAML

 <ListBox.ItemTemplate>
                    <DataTemplate>
                        <StackPanel Orientation="Horizontal">
                            <Image Source="{Binding imgurl}" MaxHeight="120" MaxWidth="120" Margin="0,10,0,0" />
                            <TextBlock Text="{Binding title}" Margin="50,0,12,0" />
                        </StackPanel>
                    </DataTemplate>
  </ListBox.ItemTemplate>

Could anybody help me?

Screenshot enter image description here


Solution

  • Ah ya, so I guess it is as simple as it looked. You just need to restrict the width of where your text is and invoke TextWrapping, which you have multiple options to accomplish that. Here's a couple possibilities...

     <ListBox.ItemTemplate>
                        <DataTemplate>
                            <StackPanel Orientation="Horizontal">
                                <Image Source="{Binding imgurl}" MaxHeight="120" MaxWidth="120" Margin="0,10,0,0" />
                                <TextBlock Text="{Binding title}" Margin="50,0,12,0" TextWrapping="Wrap" MaxWidth="{Binding ActualWidth, ElementName=Self}"/>
                            </StackPanel>
                        </DataTemplate>
      </ListBox.ItemTemplate>
    

    Or you could have a panel do it which should get restricted by its parent...

    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <Grid Margin="0,10,0,0">
                                <Grid.ColumnDefinitions>
                                   <ColumnDefinition/>
                                   <ColumnDefinition Width="*"/>
                                </Grid.ColumnDefinitions>
                                <Image Source="{Binding imgurl}" MaxHeight="120" MaxWidth="120" />
                                <TextBlock Grid.Column="1" Text="{Binding title}" TextWrapping="Wrap" Margin="50,0,2,0" />
                            </Grid>
                        </DataTemplate>
      </ListBox.ItemTemplate>
    

    Or depending on how this ListBox is layed out as a child, it could possibly even be as easy as just adding TextWrapping="Wrap" to the TextBlock and then setting the MaxWidth on the ListBox itself. Either way, hope this helps... :)