3

你好,

我想在 WPF 中制作一个自定义堆栈面板,它会根据面板的高度自动将他的孩子调整为一定的大小。但是面板高度是动态的,因为它延伸到他的父母。当我想获得高度时(我尝试了所有可能性,请参阅代码),它始终为 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);
    }
}
4

2 回答 2

5

这可能与您实际查询this.ActualHeight有关。当时AddChild()称为高度可能仍然为0,因为测量通道和排列通道可能还没有通过。所有影响孩子的尺寸和布局的事情都应该在MeasureOverrideArrangeOverride中完成

您应该看看如何编写自定义面板。有大量关于这个主题的资源。我个人认为是一个很好且足够简单的教程。

于 2010-09-10T11:08:54.370 回答
0

ActualHeight 是正确的属性,但在您阅读它时,尚未计算高度。

按照此链接了解构建自定义布局面板的推荐方法:http: //www.wpftutorial.net/CustomLayoutPanel.html

于 2010-09-10T11:08:03.657 回答