У меня есть Аккордеон, и высота его содержания может быть динамично изменена. Я хотел бы видеть, что Аккордеон динамично отвечает на высоту дочернего объекта, но я испытываю затруднения при выполнении этого.
<lt:Accordion Name="MyAccordion"
SelectionMode="ZeroOrOne"
HorizontalAlignment="Stretch">
<lt:AccordionItem Name="MyAccordionItem"
Header="MyAccordion"
IsSelected="True"
HorizontalContentAlignment="Stretch"
VerticalAlignment="Stretch">
<StackPanel>
<Button Content="Grow" Click="Grow"/>
<Button Content="Shrink" Click="Shrink"/>
<TextBox Name="GrowTextBox"
Text="GrowTextBox"
Height="400"
Background="Green"
SizeChanged="GrowTextBox_SizeChanged"/>
</StackPanel>
</lt:AccordionItem>
</lt:Accordion>
private void Grow(object sender, System.Windows.RoutedEventArgs e)
{
GrowTextBox.Height += 100;
}
private void Shrink(object sender, System.Windows.RoutedEventArgs e)
{
GrowTextBox.Height -= 100;
}
private void GrowTextBox_SizeChanged(object sender, System.Windows.SizeChangedEventArgs e)
{
MyAccordion.UpdateLayout();
MyAccordionItem.UpdateLayout();
}
Обратите внимание, если бы я сворачиваю и затем вновь открыл аккордеон, он формируется просто способ, которым я хочу, но я хотел бы, чтобы это изменение размеров произошло сразу, когда ребенок изменяет размер.
Я слабо попытался зафиксировать это путем добавления обработчика событий SizeChanged, который называет UpdateLayout () на Аккордеоне и AccordionItem, но это не имеет никакого визуального эффекта. Я не могу выяснить, где надлежащее изменение размеров происходит в управлении Аккордеоном. У кого-либо есть идея?
У меня похожая проблема, мой простой хак выглядит следующим образом:
private void GrowTextBox_SizeChanged(object sender, System.Windows.SizeChangedEventArgs e)
{
MyAccordionItem.Measure(new Size());
MyAccordionItem.UpdateLayout();
}
Надеюсь, это работает и для вас.
Аплодисменты