Позиционирование элемента на холсте - PullRequest
8 голосов
/ 24 декабря 2010

У меня есть холст и красный прямоугольник. Rectangle имеет обработчик событий MouseDown:

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

Метод CreateMyBorder должен создать Border UIElement с тем же размером и позицией , что и прямоугольник на холсте, то есть он должен покрывать красный прямоугольник.

Копировать свойства Width и Height красного прямоугольника и установить их для элемента 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);

не работает, так как значения переменных x и y равны NaN. Почему?

Пожалуйста, помогите, я не могу поверить, что что-то столь же тривиальное, как получение и установка позиции UIElement на панели, может быть настолько раздражающим. Благодарю.

1 Ответ

12 голосов
/ 24 декабря 2010

Вы можете использовать статические функции на Canvas:

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

Осторожно, Canvas никогда не отображать элементы с Left или Top, равными double.NaN, что является значением по умолчаниюдля Left и Top.

...