Скажем, у меня есть следующий ListView:
<ListView ScrollViewer.VerticalScrollBarVisibility="Auto">
<ListView.View>
<GridView>
<GridViewColumn Header="Something"
DisplayMemberBinding="{Binding Path=ShortText}" />
<GridViewColumn Header="Description"
DisplayMemberBinding="{Binding Path=VeryLongTextWithCRs}" />
<GridViewColumn Header="Something Else"
DisplayMemberBinding="{Binding Path=AnotherShortText}" />
</GridView>
</ListView.View>
</ListView>
Я хотел бы, чтобы столбцы краткого текста всегда поместились в экран и столбец длинного текста для использования остающегося пространства, переход на новую строку при необходимости.
Это возможно?
Нет простого способа сделать это с помощью GridListView, поскольку он не поддерживает установку ширины столбца на «*» (заполнить оставшееся пространство).
Здесь обсуждается, как можно подделать это, используя IValueConverter, чтобы установить ширину столбца равной TotalListWidth - SumOfColumnWidths
С другой стороны, рассматривали ли вы возможность использования DataGrid ] вместо? Это будет поддерживать тот вид макета, который вы ищете, но это значительно более сложный контроль. Он также встроен только в .NET 4, хотя вы можете получить эквивалент для 3.5 с помощью WPF Toolkit .
Установите Width = "Auto"
в столбцах GridViewColumns. Однако из-за виртуализации вы можете столкнуться с некоторыми проблемами с автоматическим определением размера.
Короче говоря, если вам нужен точный автоматический размер столбцов, вам нужно будет пересчитать ширину при изменении видимых данных из-за виртуализации.