Wpf - 无法进行文本换行

时间:2010-10-20 08:45:01

标签: wpf

我是WPF的新手,我需要你的帮助 - 请。 :)

我需要一个只有垂直滚动的ItemsControl,如果项目不适合,则必须换行。

我做了一些代码示例:

<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

知道为什么我的物品不包裹?

2 个答案:

答案 0 :(得分:1)

可以使用属性“TextWrapping”包装Textblock的内容,就像您所做的那样。而不是使用Stackpanel,尝试使用Dockpanel /网格。

答案 1 :(得分:1)

试试这个

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