Как заставить ListView (или DataGrid) работать с TextWrapping (WPF) - PullRequest
2 голосов
/ 05 февраля 2009

Я имею в виду, у меня есть один из этих элементов управления и текст внутри одного из его столбцов. Обычно, если пользователь меняет размер столбца, он просто обрезает текст. Если я пытаюсь использовать шаблон с textblock или textbox и установить TextWrapping = "Wrap" внутри шаблона - это действительно ничего не меняет. Какой выход?

* И да, я искал, прежде чем спрашивать, и нашел похожие вопросы на этом сайте. Но без ответа (((*


Энди, спасибо за ответ, хотя я сам думал, что так и должно быть. Я проверял ваш простой вариант, и он работает. Хотя у меня есть подобный пример, и он не сработал. Единственное отличие заключалось в том, что в шаблоне я использовал свой UserControl с TextBlock и другими элементами управления внутри StackPanel внутри его Content Content. И после часа экспериментирования с Width, HorizontalAlignment и так далее в другой части кода я понимаю, что ничего не могу сделать. А потом - я просто изменил StackPanel с помощью Grid. И - альт! - оно работает. Я не знаю, является ли это ошибкой или просто какой-то конкретной реакцией StackPanel (на самом деле я проверил ее параметры во время выполнения - и это было очень странно: ActualWidth больше, чем DesiredSize и реальная ширина Panel). Так что, если кто-то может сказать мне - почему это так? - Это было бы интересно. Если нет - я просто буду использовать версию с сеткой.

Ответы [ 2 ]

4 голосов
/ 07 февраля 2009

У меня сработало следующее:

<ListView ItemsSource="{Binding Source={StaticResource MyItems}}">
    <ListView.View>
        <GridView>
            <GridViewColumn Width="50" Header="Column 1">
                <GridViewColumn.CellTemplate>
                    <DataTemplate x:Name="col1Template">
                        <TextBlock TextWrapping="WrapWithOverflow" Text="{Binding Path=Column1Text}" />
                    </DataTemplate>
                </GridViewColumn.CellTemplate>
            </GridViewColumn>
            ...
        </GridView>
    </ListView.View>
</ListView>

Это приводило к тому, что текст в первом столбце переносился на несколько строк, если ширина столбца была недостаточной, чтобы показать весь текст.

1 голос
/ 28 апреля 2010

Убедитесь, что у вас не определена сетка данных RowHeight или что она будет переопределять «истинную» высоту текстового блока после того, как он был перенесен.

...