没有设置属性时,修改控件的能力会消失

时间:2010-02-08 03:40:39

标签: wpf controls

我正在以编程方式将控件添加到画布中,这很棒......

var newControlPoint = new ControlPoint() { Width = 10, Height = 10 };
newControlPoint.SetResourceReference(Control.TemplateProperty, "ControlPoint");
SetCanvasPosition(newControlPoint, position.X - (newControlPoint.Width / 2), position.Y - (newControlPoint.Height / 2));
canvas.Children.Add(newControlPoint);
newControlPoint.UpdateLayout();

...但是当我尝试从第一行删除硬连线的宽度和高度设置时,我正在解开...

var newControlPoint = new ControlPoint();

...画布定位似乎没有生效,新创建的控件在{0,0}处结束。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

两个问题:

  1. 不会设置“宽度”和“高度”属性,因为您尚未明确设置它们。它是您想要的ActualWidth和ActualHeight,由WPF设置。
  2. 控件尚未布局,因此ActualWidth和ActualHeight将为零。
  3. 要解决此问题,您可以:

    1. 使用数据绑定而不是进行一次性计算。
    2. 将定位逻辑附加到控件的Loaded事件,使其定位。
    3. 使用Dispatcher.BeginInvoke在布局中以较低优先级运行的单独消息中运行布局逻辑,从而确保已计算并分配ActualWidth和ActualHeight。