WPF - как заполнить все пространство ListView заголовками столбцов - PullRequest
0 голосов
/ 23 сентября 2019

У меня есть ListView с пятью столбцами.И эти столбцы имеют ширину.Но есть проблема с пустым пространством после последнего столбца.Я хочу избавиться от этого.К сожалению, я не смог выяснить, как это сделать.

Ситуация сейчас:

image

Как видите, после столбца есть свободное место5. Я просто хочу установить столбцы 2 - 5 статической ширины (скажем, 100), выровнять их как-нибудь вправо и позволить столбцу 1 заполнить оставшееся пространство.Поэтому, когда я изменяю размер главного окна, эти четыре столбца должны иметь одинаковый размер, но первый должен быть шире.

XAML:

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*" />
    </Grid.ColumnDefinitions>
    <ListView Name="ListView1" Grid.Column="0" Width="Auto" >
        <ListView.View>
            <GridView>
                <GridViewColumn Header="Column1" Width="200"/>
                <GridViewColumn Header="Column2" Width="100"/>
                <GridViewColumn Header="Column3" Width="100"/>
                <GridViewColumn Header="Column4" Width="100"/>
                <GridViewColumn Header="Column5" Width="100"/>
            </GridView>
        </ListView.View>
    </ListView>
</Grid>

Ответы [ 2 ]

1 голос
/ 23 сентября 2019

Вот решение, которое работает, но оно немного вовлечено.Другие столбцы, кроме первого, должны иметь одинаковую ширину.вот XAML

ListView Name="ListView1" Grid.Column="0" Width="auto" SizeChanged="ListView1_SizeChanged">
        <ListView.View>
            <GridView>
                <GridViewColumn Header="Column1" Width="200"/>
                <GridViewColumn Header="Column2" Width="{Binding EqualSize}"/>
                <GridViewColumn Header="Column3" Width="{Binding EqualSize}"/>
                <GridViewColumn Header="Column4" Width="{Binding EqualSize}"/>
                <GridViewColumn Header="Column5" Width="{Binding EqualSize}"/>
            </GridView>
        </ListView.View>
    </ListView>

Теперь определите свойство «EqualSize» на основе фактической ширины ListView.Это определение должно быть обновлено в обработчике событий SizeChanged ListView.Вот код:

private double _equalSize;
    public double EqualSize {
        get { return _equalSize; }
        set {
            if (_equalSize!=value) {
                _equalSize = value;
                RaisePropertyChanged();
            }
        }
    }
    private void ListView1_SizeChanged(object sender, SizeChangedEventArgs e) {
        EqualSize = (colDef.ActualWidth - 200) / 4;
    }// The magic number 200 is the size of the first column and 4 is the number of columns that share the same size

Это можно реализовать из файла с выделенным кодом (рекомендуется) или из класса модели представления

0 голосов
/ 23 сентября 2019

Попробуйте взять процент вместо фиксированного размера.

private void ListView_SizeChanged(object sender, SizeChangedEventArgs e)
{
    ListView listView = sender as ListView;
    GridView gridView = listView.View as GridView;

    var width = listView.ActualWidth - SystemParameters.VerticalScrollBarWidth;

    var column1 = 0.40;
    var column2 = 0.15;
    var column3 = 0.15;
    var column4 = 0.15;
    var column5 = 0.15;

    gridView .Columns[0].Width = width*column1;
    gridView .Columns[1].Width = width*column2;
    gridView .Columns[2].Width = width*column3;
    gridView .Columns[3].Width = width*column4;
    gridView .Columns[4].Width = width*column5;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...