Wpf - не могу сделать перенос текста - PullRequest
2 голосов
/ 20 октября 2010

Я новичок в 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 ]

1 голос
/ 20 октября 2010

просто попробуйте это

 <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>
1 голос
/ 20 октября 2010

Содержимое текстового блока можно обернуть, используя свойство "TextWrapping", как вы это сделали. Вместо использования Stackpanel, попробуйте использовать Dockpanel / grid.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...