Переполнение текста в шаблоне данных Listbox - PullRequest
2 голосов
/ 31 января 2012

Я работаю над шаблоном данных для списка. Одно из полей, связанных с данными, содержит длинное описание, и я не знаю, как сделать так, чтобы текст просто переносился по краю элемента списка. Это мой код xaml ...

<ListBox x:Name="lstTest" ScrollViewer.HorizontalScrollBarVisibility="Disabled" HorizontalContentAlignment="Stretch">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <StackPanel Orientation="Vertical">
                    <Label Content="{Binding Path=Name}"></Label>
                    <TextBlock TextWrapping="Wrap"  Text="{Binding Path=Description}"></TextBlock>
                </StackPanel>
                <DockPanel LastChildFill="True">
                    <Label Content="{Binding Path=AuctionDate}"></Label>
                </DockPanel>
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

Образец товара ...

new AuctionItem
{
    RecordId = 1,
    Name = "Auction G",
    Description = "Morbi eu nisl sed magna vestibulum ultrices quis eu enim. Nunc semper libero at tellus tincidunt eu elementum turpis rhoncus. Mauris condimentum semper pulvinar. Integer vel ante ipsum, at pulvinar sapien. Donec vestibulum ultricies dui sed viverra. Sed a augue diam, et mollis libero. Phasellus eget rutrum nibh.",
    AuctionDate = DateTime.Now
}

Что я спрашиваю, это даже правильная структура для того, чего я пытаюсь достичь? Я бы хотел, чтобы дата была справа от пункта. Я хотел бы, чтобы имя было слева вверху, а под именем - описание. Я могу сделать описание фиксированного размера, но я бы хотел, чтобы элементы списка корректно изменяли размер списка.

Буду признателен за любую помощь, которую вы можете оказать с этим ...

Спасибо!

Ответы [ 2 ]

2 голосов
/ 02 февраля 2012

Ваша проблема со StackPanel.

Удалите его и замените сеткой.Это было источником горя и для меня.

Я сделал что-то подобное, чтобы подражать вашей ситуации, и это работает для меня:

<Grid>
    <ListBox ScrollViewer.HorizontalScrollBarVisibility="Disabled">
        <ListBox.ItemTemplate>
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="Auto" />
                    <ColumnDefinition />
                    <ColumnDefinition Width="Auto" />
                </Grid.ColumnDefinitions>
                <TextBlock Text="{Binding RecordID}" />
                <TextBlock Grid.Column="1" Text="{Binding Description}" TextWrapping="Wrap" />
                <TextBlock Grid.Colunm="2" Text="{Binding AuctionDate}" />
            </Grid>
        </ListBox.ItemTemplate>
    </ListBox>
<Grid>

Смотрите этот ответ .И этот ответ .

Удачи!

1 голос
/ 31 января 2012

У вас уже есть набор для переноса текста, так что все, что осталось, это максимальный набор MaxWidth;

MaxWidth="Numeric Value" should do it or a MaxWidth="{Binding YourTextBoxBlockName, Path=ActualWidth}"

если ты хочешь с ним смириться и ты должен быть золотым. Надеюсь, это поможет и удачи!

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