2016-01-13 67 views
0

我正在嘗試創建一個自定義Shape,我首先創建了一個RectangleRectangleGeometry - 剪切矩形

這裏是我的代碼:

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

當我使用10050Width和分別爲RectangleHeight,在Rectangle正在繪製完美。

但是,如果我增加要麼Width和/或Height對我們說200100,拉制形狀不是Rectangle但只包含兩行(形狀看起來像它畫一個Rectangle只有它被切斷 - 好像我有一些可以繪製形狀的邊界)。

我在Canvas繪製Shape,這裏是該代碼:

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

請注意,類形狀已具有寬度和高度屬性。只需使用它們,即'return new RectangleGeometry(new Rect(0,0,Width,Height));' – Clemens

+0

@Clemens - 事實上,我更新了我的答案。無論如何,我或多或少地認爲Shape將需要自定義屬性 –