2016-01-13 3 views
0

Я пытаюсь создать пользовательский Shape, я начал с создания Rectangle.RectangleGeometry - Прямоугольник разрезается

Вот мой код:

public class CustomRectangle : Shape 
{ 
    protected override Geometry DefiningGeometry 
    { 
     get 
     { 
      return new RectangleGeometry(new Rect(new Point(10, 10), new Size(100, 50))); 
     } 
    } 
} 

Когда я использую 100 и 50 для Width и Height из Rectangle соответственно Rectangle втягивается отлично.

Однако, если я увеличиваю либо Width и/или Height для скажем 200 и 100, нарисованной форма не Rectangle, но форма, содержащая только две линии (выглядит как он это сделать Rectangle только она разрезается - как будто у меня есть некоторые границы, в которых можно нарисовать фигуру).

Я рисовать Shape на Canvas, а вот код, который:

private void MouseClick(object sender, MouseButtonEventArgs mouseButtonEventArgs) 
{ 
     if (mouseButtonEventArgs.LeftButton != MouseButtonState.Pressed) 
     { 
      m_downClick = new Point(-1, -1); 
      return; 
     } 

     m_downClick = mouseButtonEventArgs.GetPosition(sender as Canvas); 

     var newRect = new CustomRectangle {Width = 200, Height = 100, Stroke = Brushes.Black, Location = m_downClick}; 
     Canvas.SetTop(newRect , m_downClick.Y); 
     Canvas.SetLeft(newRect , m_downClick.X); 

     (sender as Canvas).Children.Add(newRect); 
} 

Что может быть причиной этого?

ответ

0

DefiningGeometry использует жестко закодированное местоположение и размер для геометрии фигуры, поэтому размеры, полученные в MouseClick, игнорируются при получении формы.

Используйте свойства ширины и высоты (зависимости) формы в DefiningGeometry, чтобы определить размер геометрии до предполагаемого размера.

+1

Обратите внимание, что класс Shape уже имеет свойства Width и Height. Просто используйте их, т. Е. Верните новую RectangleGeometry (новый Rect (0, 0, Width, Height)); ' – Clemens

+0

@Clemens. Действительно, я обновил свой ответ. Я более или менее предполагал, что Shape будет нуждаться в пользовательских свойствах позже в любом случае –

Смежные вопросы