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