在画布上定位UIElement

时间:2010-12-23 23:28:01

标签: wpf canvas wpf-controls uielement wpf-positioning

我有一个画布和一个红色矩形。 Rectangle已实施MouseDown个事件处理程序:

private void RedRectangle_MouseDown(object sender, MouseButtonEventArgs e)
{
    CreateMyBorder();
}

CreateMyBorder方法应该创建一个Border UIElement,其大小相同,位置为画布上的矩形,即它应该覆盖红色矩形。

复制红色矩形的WidthHeight属性并为Border元素设置它们非常简单:

myBorder.Height = RedRectangle.Height;
myBorder.Width = RedRectangle.Width;

然而,经过2个小时的试错后,我无法在画布上复制红色矩形的位置!预期:

double x = RedRectangle.GetValue(Canvas.Left);
double y = RedRectangle.GetValue(Canvas.Top);
myBorder.SetValue(Canvas.Left, x);
myBorder.SetValue(Canvas.Top, y);

不起作用,xy变量值为NaN。为什么呢?

请帮忙,我无法相信在某个小组中获取和设置UIElement的位置一样微不足道的事情可能会非常恼人。谢谢。

1 个答案:

答案 0 :(得分:12)

您可以使用Canvas上的静态函数:

Canvas.SetLeft(element, x);
Canvas.SetTop(element, y);

请注意,Canvas永远不会显示LeftTop等于double.NaN的元素,这是LeftTop的默认值