代码之家  ›  专栏  ›  技术社区  ›  lzcd

在未设置属性时修改控件dissapes的能力

  •  0
  • lzcd  · 技术社区  · 16 年前

    我正在以编程方式将控件添加到画布中,这一切都非常美妙…

    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 回复  |  直到 14 年前
        1
  •  0
  •   Tim Cooper    14 年前

    两个问题:

    1. 不会设置宽度和高度属性,因为尚未显式设置它们。这是你想要的实际宽度和实际高度,由wpf设置。
    2. 控件尚未布局,因此实际宽度和实际高度将为零。

    为了解决这个问题,你可以:

    1. 使用数据绑定而不是一次性计算。
    2. 将定位逻辑附加到控件的已加载事件,使其已定位。
    3. 使用dispatcher.begininvoke在一个单独的消息中运行布局逻辑,该消息的优先级低于layout,从而确保已计算并分配了actualwidth和actualheight。