Как автоматически растянуть столбец ListView, чтобы заполнить содержащую Grid в WPF? - PullRequest
4 голосов
/ 11 ноября 2010

Я создал ListView, состоящий из 2 столбцов: «Имя файла» и «Размер (МБ)». Этот ListView содержится в сетке. Поскольку имена файлов, вероятно, будут длиннее, чем размеры файлов, я хочу выделить максимально возможную ширину для столбца «имя файла» без повреждения столбца «размер». Другими словами, я хочу, чтобы столбец «size» соответствовал своему содержанию, а столбец «file name» - чтобы заполнить остальную часть таблицы.

Я играл со многими параметрами, но смог достичь своей цели.

Моя последняя попытка выглядит так:

                <ListView Name="BrowseFilesListView">                        
                    <ListView.ItemContainerStyle>
                        <Style TargetType="ListViewItem">
                            <Setter Property="HorizontalContentAlignment" Value="Stretch" />
                        </Style>
                    </ListView.ItemContainerStyle>                        
                    <ListView.View>
                        <GridView>                               
                            <GridViewColumn Header="File Name"> 
                                <GridViewColumn.CellTemplate>
                                    <DataTemplate>
                                        <TextBlock Text="{Binding Name}" HorizontalAlignment="Stretch"/>
                                    </DataTemplate>
                                </GridViewColumn.CellTemplate>
                            </GridViewColumn>
                            <GridViewColumn Width="Auto" Header="Size (MB)" DisplayMemberBinding="{Binding Path=Size}"/>
                        </GridView>
                    </ListView.View>
                </ListView>

Кто-нибудь может мне помочь?

Ответы [ 2 ]

0 голосов
/ 09 июля 2012

Это должно работать:

var gridView = SearchResultsTable.View as GridView;
var columns = new GridViewColumnCollection();
if (gridView != null)
{
    columns = gridView.Columns;
}
var width = BrowseFilesListView.ActualWidth;
var sizeWidth = columns[1].ActualWidth; // columns[0] is the Filename, etc.
const int padding = 10; // slightly hackish
columns[0].Width = width - sizeWidth - padding;

Я бы поместил его в коде представления, в событии Window_LoadedОн не проверяет ширину файлов;Я делаю предположение, что они будут меньше заголовка.

0 голосов
/ 11 ноября 2010

Насколько я знаю, это не поддерживается в WPF. Может быть, вам стоит проверить это решение:

http://www.codeproject.com/KB/grid/ListView_layout_manager.aspx

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