Spe*_*ish 3 wpf xaml panel stackpanel
你好,
我想在 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);
}
}
Run Code Online (Sandbox Code Playgroud)
这可能有做的时候,你居然查询this.ActualHeight。当时AddChild()被称为高度可能仍然为 0,因为测量通道和排列通道可能尚未通过。影响孩子的度量和布局的一切都应该在MeasureOverride和ArrangeOverride 中完成
您应该看看如何编写自定义面板。有很多关于这个主题的资源。我个人认为这是一个很好且足够简单的教程。
| 归档时间: |
|
| 查看次数: |
3494 次 |
| 最近记录: |