动态调整开放式手风琴的大小

And*_*ers 9 wpf accordion wpftoolkit

我有一个手风琴,其内容的高度可以动态调整大小.我想看到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();
    }
Run Code Online (Sandbox Code Playgroud)

请注意,如果我崩溃然后重新打开手风琴,它就会按照我想要的方式成型,但我希望在孩子调整大小时立即调整大小.

我试图通过添加一个在Accordion和AccordionItem上调用UpdateLayout()的SizeChanged事件处理程序来解决这个问题,但这没有任何视觉效果.我无法弄清楚在Accordion控件内进行适当调整的位置.有没有人有想法?

Bat*_*eni 1

试试这个

 //here i am creating a size object depending on child items height and width
        // and 25 for accordian item header...
        // if it works you can easily update the following code to avoid exceptional behaviour
        Size size = new Size();
        size.Width = GrowTextBox.ActualWidth;
        size.Height = grow.ActualHeight + shrink.ActualHeight + GrowTextBox.ActualHeight + 25;
        MyAccordion.Arrange(new Rect(size));
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,我只是根据子项目的大小重新排列手风琴。