Вопрос

Этот вопрос такой же, как и этот другой вопрос без ответа .

Когда Expander расширяется, внешний ListView увеличивается, чтобы освободить место для содержимого модулей расширения, но когда Expander затем свернул представление не заставляет ListView изменять размер.

Сокращенный код с примечаниями после:

<!--<StackPanel>-->
<ItemsControl>

  <!-- ParameterGroupView -->
  <Border BorderBrush="Brown" BorderThickness="1" CornerRadius="4" Padding="4">
    <ListView HorizontalContentAlignment="Stretch">
      <Expander Header="Expander A" IsExpanded="False">
        <ListView HorizontalContentAlignment="Stretch">

          <!-- TextView -->
          <TextBlock >Content A</TextBlock>
          <TextBlock >Content B</TextBlock>

        </ListView>
      </Expander>

    </ListView>
  </Border>

</ItemsControl>
<!--</StackPanel>-->

У меня есть ParameterGroupView в ItemsControl или StackPanel , потому что на самом деле есть много записей ParameterGroupView . Обмен на StackPanel не меняет поведение.

Удаление Границы не влияет на поведение, но наличие этого помогает показать поведение только с одним ParameterGroupView .

Во внешнем ListView может быть много разделов Expander , а внутри ListView может быть много сущностей. / EM>.

Внешние ListView и Expander предназначены для замены TreeView , который использовался для создания списка складных узлов, но Внутреннее использование сеток TreeView означает, что элементы TextView были сдвинуты по горизонтали, так же, как если бы вы удалили эфирные HorizontalContentAlignment = " Stretch " .

Так что, если есть другой способ обернуть / связать все это, я тоже буду счастлив.

Это проблема, потому что наши блоки TextView большие, и имеется много Expander .

Редактировать: TextView используется, поскольку код привязан к данным и, таким образом, динамически объединяется. Поэтому для любой замены ListView потребуется какая-то форма ItemsSource

Это было полезно?

Решение

Нашел решение, и в нем уже уточняется, где уже находится вопрос.

ItemControl принимает ItemsSource и автоматически изменяет размеры. Таким образом, замена двух ListView на ItemControl приводит к вложенному свертыванию.

Но прокрутки нет, поэтому обертывание внешнего ItemControl с помощью ScrollViewer воспроизводит полный желаемый эффект.

<ScrollViewer
    VerticalScrollBarVisibility="Auto">
    <ItemsControl>
        <!-- ParameterGroupView -->
        <Border
            BorderBrush="Brown"
            BorderThickness="1"
            CornerRadius="4"
            Padding="4"
            Height="Auto">
            <ItemsControl
                HorizontalContentAlignment="Stretch">
                <Expander
                    Header="Expander A"
                    IsExpanded="False">
                    <ItemsControl
                        HorizontalContentAlignment="Stretch">
                        <!-- TextView -->
                        <TextBlock>Content A</TextBlock>
                        <TextBlock>Content B</TextBlock>
                    </ItemsControl>
                </Expander>
            </ItemsControl>
        </Border>
    </ItemsControl>
</ScrollViewer>

Я тестировал с двойными расширителями в разделах Border и Double Border.

Другие советы

Самая очевидная вещь, которую нужно сделать здесь, - это поместить расширители в контейнер, отличный от списка:

<Border BorderBrush="Brown" BorderThickness="1" CornerRadius="4" Padding="4">
    <StackPanel>

        <Expander Header="Expander A" IsExpanded="False">
            <ListView HorizontalContentAlignment="Stretch" MinWidth="100">
                <ListBox Name="listb"></ListBox>

                <!-- TextView -->
                <TextBlock >Content A</TextBlock>
                <TextBlock>Content B</TextBlock>

            </ListView>
        </Expander>
    </StackPanel>
</Border>

Контейнер изменяет размер содержимого.

Если вам абсолютно необходимо иметь его в ListView (что возможно), то я не знаю, как заставить ListView легко изменить размер после его увеличения (помимо установки явных размеров всего объекта, что является неуклюжим и не полезно). Если это так, то, возможно, вам придется использовать управляемый список для отображения всех открытых расширителей или отображать содержимое другим способом (например, во всплывающем окне, может быть?), Если вы хотите, чтобы его можно было увидеть все с первого взгляда.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top