У меня есть 3 расширителя в Grid.Column, которые должны разделять доступное пространство (высоту).Некоторый расширитель должен получить все необходимое пространство, другой должен «разделить» пространство при открытии.Поэтому я создал очень простую StackablePanel с AttachedProperty "ChildShareHeight".Пока все хорошо, и моя Панель назначает подходящее место для каждого расширителя.К сожалению, Expander.Content не реагирует должным образом.Когда блок ExpanderContent меньше, чем TreeView, внутренний ScrollViewer из элемента управления TreeView не отображается, и я не могу найти способ ограничить размер TreeView размером элемента Expander.Content (для активации ScrollViewer) или какдля принудительного обновления макета для элемента Expander.Content.
Эти 2 изображения иллюстрируют мою проблему: [1] Достаточно места - нет общего доступа (https://ibb.co/FBGFxNW) [2] Недостаточно места - активный общий доступ (https://ibb.co/K2s4nB9). Чтобы проверить процесс размещения, я обнаружил «прозрачную» панель в элементе Expander.Content для отслеживания функций Measure и Arrange. Каждый Expander запускается правильно для Measure and Arrange, но Expander.Content необновлено.
Я также искал некоторые другие решения, такие как привязка свойства TreeView MaxHeight к некоторым внешним элементам, но я пока не нашел никакого рабочего решения. Помещение всей группы Expander в ScrollViewer не являетсявариант для меня. Есть идеи, как ее решить?
Ниже XAML моего примера.
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="3*"/>
<ColumnDefinition Width="1*"/>
</Grid.ColumnDefinitions>
<uic:StackablePanel Grid.Column="1" Margin="10">
<Expander Header="Expander 1" IsExpanded="False" Margin="5" BorderBrush="Blue" uic:StackablePanel.ChildShareHeight="False">
<Expander.Content>
<uic:HeightLimitPanel >
<StackPanel Orientation="Vertical" uic:HeightLimitPanel.ExpanderName="Expander 1">
<TextBlock Text="Test 10"/>
...
</StackPanel>
</uic:HeightLimitPanel>
</Expander.Content>
</Expander>
<Expander Header="Expander 2" IsExpanded="False" Margin="5" BorderBrush="Red" uic:StackablePanel.ChildShareHeight="True">
<Expander.Content>
<uic:HeightLimitPanel >
<TreeView uic:HeightLimitPanel.ExpanderName="Expander 2">
<TreeViewItem Header="Test 2" IsExpanded="True">
<TreeViewItem Header="Text 2.10"/>
...
<TreeViewItem Header="Text 2.18"/>
</TreeViewItem>
</TreeView>
</uic:HeightLimitPanel>
</Expander.Content>
</Expander>
<Expander Header="Expander 3" IsExpanded="False" Margin="5" BorderBrush="Green" HorizontalAlignment="Stretch" uic:StackablePanel.ChildShareHeight="True" >
<Expander.Content>
<uic:HeightLimitPanel>
<TreeView uic:HeightLimitPanel.ExpanderName="Expander 3">
<TreeViewItem Header="Test 3" IsExpanded="True">
<TreeViewItem Header="Text 3.10"/>
...
<TreeViewItem Header="Text 3.21"/>
</TreeViewItem>
</TreeView>
</uic:HeightLimitPanel>
</Expander.Content>
</Expander>
</uic:StackablePanel>
</Grid>