2010-10-20 32 views
2

Je suis un débutant à WPF et j'ai besoin de votre aide - s'il vous plaît. :)Wpf - ne peut pas faire de text wrap

J'ai besoin d'un ItemsControl avec seulement un défilement vertical et si les items ne rentrent pas, ils doivent s'enrouler.

J'ai fait un petit échantillon de mon code:

<Grid>  
    <ItemsControl Margin="64,73,65,76" BorderThickness="1" Name="lst" HorizontalContentAlignment="Stretch" Background="White" BorderBrush="#FFBABABA"> 
     <ItemsControl.ItemTemplate> 
      <DataTemplate DataType="{x:Type local:Song}"> 
      <Border x:Name="personsBorder" CornerRadius="3" Background="#FFD8ECFC" Margin="1,1,1,1" Padding="2,2,2,2"> 
       <StackPanel Orientation="Horizontal"> 
        <Image Width="16" Height="16" Source="icon.png" /> 
        <TextBlock x:Name="txtLyric" Text="{Binding Lyric}" Padding="2,2" Foreground="Black" Height="Auto" TextTrimming="WordEllipsis" TextWrapping="WrapWithOverflow" /> 
       </StackPanel> 
      </Border> 
     </DataTemplate> 
     </ItemsControl.ItemTemplate> 
     <ItemsControl.Template> 
      <ControlTemplate TargetType="{x:Type ItemsControl}"> 
       <ScrollViewer CanContentScroll="True" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled"> 
        <ItemsPresenter></ItemsPresenter> 
       </ScrollViewer> 
      </ControlTemplate> 
     </ItemsControl.Template> 
    </ItemsControl> 
</Grid> 

Public Class Song 
    Public Property Lyric As String 
    Public Sub New(ByVal lyric As String) 
     Me.Lyric = lyric 
    End Sub 
End Class 


Class MainWindow 
    Private Sub MainWindow_Loaded(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles Me.Loaded 
     Dim l As New List(Of Song) 
     l.Add(New Song("This is first line")) 
     l.Add(New Song("The quick brown fox jumps over the lazy dog The quick brown fox jumps over the lazy dog The quick brown fox jumps over the lazy dog")) 
     l.Add(New Song("This is third line")) 
     Me.lst.ItemsSource = l 
    End Sub 
End Class 

Toute idée pourquoi mes articles ne sont pas enveloppent?

Merci un million !!!

Mojo

Répondre

1

juste essayer cette

<Grid> 
     <ItemsControl Margin="64,73,65,76" BorderThickness="1" Name="lst" HorizontalContentAlignment="Stretch" Background="White" BorderBrush="#FFBABABA"> 
      <ItemsControl.ItemTemplate> 
       <DataTemplate DataType="{x:Type local:Song}"> 
        <Border x:Name="personsBorder" CornerRadius="3" Background="#FFD8ECFC" Margin="1,1,1,1" Padding="2,2,2,2"> 
         <Grid>   
          <Grid.ColumnDefinitions> 
           <ColumnDefinition Width="Auto"></ColumnDefinition> 
           <ColumnDefinition></ColumnDefinition> 
          </Grid.ColumnDefinitions> 
          <!--<Image Width="16" Height="16" Source="icon.png" />--> 
          <Rectangle Fill="Red" Height="16" Width="16"></Rectangle> 
          <TextBlock Grid.Column="1" x:Name="txtLyric" Text="{Binding Lyric}" Padding="2,2" Foreground="Black" Height="Auto" TextTrimming="WordEllipsis" TextWrapping="WrapWithOverflow" /> 
         </Grid> 
        </Border> 
       </DataTemplate> 
      </ItemsControl.ItemTemplate> 
      <ItemsControl.Template> 
       <ControlTemplate TargetType="{x:Type ItemsControl}"> 
        <ScrollViewer CanContentScroll="True" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled"> 
         <ItemsPresenter></ItemsPresenter> 
        </ScrollViewer> 
       </ControlTemplate> 
      </ItemsControl.Template> 
     </ItemsControl> 
    </Grid> 
+0

Merci !!! Et merci pour ton code aussi !!! – MojoDK

1

Contenu du Textblock peuvent être compactés en utilisant la propriété « TextWrapping » comme vous l'avez fait. Au lieu d'utiliser un Stackpanel, essayez d'utiliser un Dockpanel/grid.

+0

Merci pour me aider! – MojoDK