如何获取StackPanel的实际当前高度?

3

你好,

我想在WPF中创建一个自定义的StackPanel,它可以根据面板的高度自动调整其子元素的大小到一定程度。但是面板的高度是动态的,因为它会伸展到其父级。当我想要获取高度时(我尝试了所有可能性,请参见代码),它总是为0或未定义,尽管在构建解决方案中它绝对不为0。

以下是代码:

XAML:

<my:AutoSizeButtonStackPanel HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>

后台代码:

public class AutoSizeButtonStackPanel : StackPanel
{
    public void AddChild(Button newButton)
    {
        double getPanelHeight;
        getPanelHeight = this.ActualHeight; //is 0
        getPanelHeight = this.ViewportHeight; //is 0
        getPanelHeight = this.Height; //is n. def.
        getPanelHeight = this.DesiredSize.Height; //is 0
        getPanelHeight = this.RenderSize.Height; //is 0

        newButton.Height = getPanelHeight / 2;

        this.Children.Add(newButton);
    }
}
2个回答

5
这可能与您实际查询this.ActualHeight时间有关。在调用AddChild()时,高度可能仍然为0,因为测量过程和排列过程可能尚未完成。影响子元素测量和布局的所有内容都应在MeasureOverrideArrangeOverride中完成。
您应该了解如何编写自定义面板。这方面有大量资源可供参考。我个人认为这篇文章是一个很好而且足够简单的教程。

谢谢,好教程(甚至对我来说都够简单的 :-P) 现在必须将调整大小逻辑放在ArrangeOverride中,现在它可以工作了。 - SpeziFish

0

我已经看过这个教程,但它不够深入,也没有解决我的问题。 - SpeziFish

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接