Этот вопрос такой же, как и этот вопрос без ответа .
Когда 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 секций, а Expander может иметь много объектов внутри внутреннего ListView .
Внешний ListView и Expander предназначен для замены TreeView , который использовался для создания списка складных узлов, но TreeView * Внутреннее использование сеток 1051 * означает, что элементы TextView были сдвинуты по горизонтали, так же, как при удалении атрибутов ether HorizontalContentAlignment = "Stretch" .
Так что, если есть другой способ обернуть / связать все это, я тоже буду счастлив.
Это проблема, потому что наши TextView блоки большие и их много Expander s.
Редактировать: TextView используется, поскольку код привязан к данным и, таким образом, динамически объединяется. Таким образом, любая замена для ListView потребует некоторой формы ItemsSource