Динамично изменение размеров открыть Accordion

У меня есть Аккордеон, и высота его содержания может быть динамично изменена. Я хотел бы видеть, что Аккордеон динамично отвечает на высоту дочернего объекта, но я испытываю затруднения при выполнении этого.

    <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, но это не имеет никакого визуального эффекта. Я не могу выяснить, где надлежащее изменение размеров происходит в управлении Аккордеоном. У кого-либо есть идея?

9
задан SpeziFish 17 October 2011 в 14:22
поделиться

1 ответ

У меня похожая проблема, мой простой хак выглядит следующим образом:

private void GrowTextBox_SizeChanged(object sender, System.Windows.SizeChangedEventArgs e)
{
        MyAccordionItem.Measure(new Size());
        MyAccordionItem.UpdateLayout();
}

Надеюсь, это работает и для вас.

Аплодисменты

1
ответ дан 5 December 2019 в 01:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: