在画布上定位UIElement

Bor*_*ris 8 wpf canvas wpf-controls uielement wpf-positioning

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

private void RedRectangle_MouseDown(object sender, MouseButtonEventArgs e)
{
    CreateMyBorder();
}
Run Code Online (Sandbox Code Playgroud)

CreateMyBorder方法应该创建一个Border与画布上的矩形具有相同大小和位置的UIElement ,即它应该覆盖红色矩形.

复制WidthHeight红色矩形的属性和设置它们的Border元件是容易的:

myBorder.Height = RedRectangle.Height;
myBorder.Width = RedRectangle.Width;
Run Code Online (Sandbox Code Playgroud)

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

double x = RedRectangle.GetValue(Canvas.Left);
double y = RedRectangle.GetValue(Canvas.Top);
myBorder.SetValue(Canvas.Left, x);
myBorder.SetValue(Canvas.Top, y);
Run Code Online (Sandbox Code Playgroud)

不起作用xy变量值NaN.为什么?

请帮助,我无法相信,UIElement在面板上获得和设置位置这样的微不足道的事情可能会非常恼人.谢谢.

Sim*_*ier 12

您可以使用静态函数Canvas:

Canvas.SetLeft(element, x);
Canvas.SetTop(element, y);
Run Code Online (Sandbox Code Playgroud)

要注意,Canvas从未显示与元件LeftTop等于double.NaN,这是缺省值LeftTop.