我在运行时创建了一个StackPanel,我想像这样度量StackPanel的Height:
StackPanel panel = new StackPanel();
panel.Children.Add(new Button() { Width = 75, Height = 25 });
Title = panel.ActualHeight.ToString();但ActualHeight也是零。如何测量Height的StackPanel
发布于 2014-03-09 13:21:22
如果您想在不加载UI内容的情况下度量大小,您必须在包含面板Arrange 的调用和来复制GUI场景。
通知WPF布局系统是如何工作的,面板首先调用Measure(),其中面板告诉它的子面板有多少可用空间,每个子面板告诉它的父节点需要多少空间。然后调用Arrange(),其中每个控件根据可用空间排列其内容或子控件。
我建议在这里多读一些-- WPF布局系统。
话虽如此,这就是你用手做的:
StackPanel panel = new StackPanel();
panel.Children.Add(new Button() { Width = 75, Height = 25 });
panel.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));
panel.Arrange(new Rect(0, 0, panel.DesiredSize.Width, panel.DesiredSize.Height));
Title = panel.ActualHeight.ToString();发布于 2014-03-09 12:35:43
我不完全确定你想要做什么,但这段代码有效:
this.SetBinding(Window.TitleProperty,
new Binding()
{
Source = panel,
Path = new PropertyPath("ActualHeight")
});通常,在布局和呈现之前,您将无法访问堆栈面板的大小。这发生在面板的Loaded事件之前,因此您可以处理该事件并处理它。
发布于 2014-03-09 12:57:29
尝试在ActualHeight事件中获取Loaded:
private void Button_Click(object sender, RoutedEventArgs e)
{
var panel = new StackPanel();
var button = new Button();
button.Width = 75;
button.Height = 25;
panel.Children.Add(button);
panel.Loaded += new RoutedEventHandler(panel_Loaded);
MainGrid.Children.Add(panel);
}
private void panel_Loaded(object sender, RoutedEventArgs e)
{
Panel panel = sender as Panel;
Title = panel.ActualHeight.ToString();
}https://stackoverflow.com/questions/22282207
复制相似问题