WPF - UIElement.RenderSize не работает для формы линии - PullRequest
0 голосов
/ 22 июня 2009

Я пытаюсь создать приложение для рисования и получаю странные результаты в моем «режиме выбора». Если я нарисую прямоугольник и «выберу его», RenderSize вернёт для него правильный размер, но если выбрана линия, RenderSize вернет размер, в котором ширина установлена ​​как Line.X2, а высота установлена ​​как Line.Y2. Например: строка начинается в X1 = 50, Y1 = 50, заканчивается в X2 = 130, Y2 = 90, RenderSize возвращает размер с шириной = 130 и высотой = 90. Мой выбор содержит элементы типа UIElement, поэтому я не знаю ( и на самом деле это не должно волновать) какая фигура выбрана для того, чтобы сделать мой режим выделения как можно более универсальным, и я хотел бы нарисовать ограничивающую рамку, пока пользователь перемещает выбранную фигуру.

Пробовал гуглить проблему, но не нашел ничего релевантного, так что, может быть, вы могли бы помочь мне с этим. Это потому, что Rectangle имеет позицию, установленную Canvas, а Line имеет свои точки, установленные явно?

1 Ответ

3 голосов
/ 22 июня 2009

Причина, по которой вы получаете 130x90, - причина, по которой вы указали. Прямоугольник в WPF без позиции, это просто высота / ширина, поэтому два значения размера равны.

Однако Линия, определяемая точками, обязательно определяет требуемое смещение от начала координат, и, таким образом, смещение включается в ограничивающую рамку.

Также обратите внимание, что вы можете продолжать использовать свойства Canvas.Top/Left с вашим объектом Line для его дальнейшего смещения, например ::

  <Canvas>
    <Line X1="50" X2="130" Y1="50" Y2="90" StrokeThickness="1" Stroke="Blue" Canvas.Top="50" Canvas.Left="30"></Line>
  </Canvas>
...