Изменение размера столбцов GridView после его отображения - PullRequest
1 голос
/ 26 сентября 2011

Настройка:

ListView с GridView, который изначально скрывается при загрузке окна, а затем становится видимым при определенных действиях пользователя.

Цель:

Уметь устанавливать относительную ширину столбцов GridView.

Проблема:

То, что мне нужно, может быть достигнуто либо с помощью конвертера по ширине (что-то похожее на ответ здесь ), либо путем добавления Поведения в ListView (см. это решение ). Оба подхода кажутся верными - но только для элементов управления, которые отображаются с самого начала. В моем случае ActualWidth всегда равен 0, когда выполняются вычисления, и эти вычисления не повторяются, когда ListView становится видимым.

Итак, я думаю, real вопрос здесь , как получить ширину столбцов для повторной оценки, когда ActViewWidth ListView становится больше 0.

Решение, предпочтительно, будет на уровне XAML, без использования кода, но это будет так же, если это единственная альтернатива; -)

Есть предложения?

PS После вопроса Криса, приведенного ниже, поясняется, как ListView скрыт / показан: это дочерний элемент другого элемента управления контейнера, размещенный в столбце Grid, и ширина этого столбца управляется триггер.

<ColumnDefinition>
    <ColumnDefinition.Style>
        <Style>
            <Setter Property="ColumnDefinition.Width" Value="4*"/>
            <Style.Triggers>
                <DataTrigger Binding="{Binding Path=OpenItems.Count}" Value="0">
                    <Setter Property="ColumnDefinition.Width" Value="0"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </ColumnDefinition.Style>
</ColumnDefinition>

Я попытался применить аналогичный триггер к самому контейнеру ListView (чтобы манипулировать его видимостью между Collapsed и Visible), но проблема в том, что столбец не сжимается от своей первоначальной ширины 4 *, поэтому я вижу (пустой) элемент управления, когда он должен быть скрыт.

1 Ответ

0 голосов
/ 26 сентября 2011

Как вы прячете / показывает ListView?Кажется, вопрос подразумевает, что вы делаете это, устанавливая свойство Width в 0 (или не ноль, чтобы показать это).Вместо этого вы должны попытаться использовать свойство Visibility (установите «Collapsed», чтобы скрыть, или «Visible», чтобы показать).Это должно привести к переоценке ширины столбца.

ОБНОВЛЕНИЕ:

Исходя из вашего обновленного вопроса, я бы предложил проверить это решение: http://www.codeproject.com/KB/grid/ListView_layout_manager.aspx

Я получил его отсюда. FWIW: WPF: расширить последний столбец GridView ListView

...