2013-05-16 68 views
0

我正在尝试将一个Rect对象添加到Canvas。使用Rectangle对象,很容易。将它添加到Canvas。 Rect看起来并不那么简单。在所提供的链接,我发现下面的代码来实现我想要的东西:将Rect添加到画布

Path myPath1 = new Path(); 
myPath1.Stroke = Brushes.Black; 
myPath1.StrokeThickness = 1; 
SolidColorBrush mySolidColorBrush = new SolidColorBrush(); 
mySolidColorBrush.Color = Color.FromArgb(255, 204, 204, 255); 
myPath1.Fill = mySolidColorBrush; 

Rect myRect1 = new Rect(); 
myRect1.X = 10; 
myRect1.Y = 100; 
myRect1.Width = 150; 
myRect1.Height = 100; 
RectangleGeometry myRectangleGeometry1 = new RectangleGeometry(); 
myRectangleGeometry1.Rect = myRect1; 

GeometryGroup myGeometryGroup1 = new GeometryGroup(); 
myGeometryGroup1.Children.Add(myRectangleGeometry1); 

myPath1.Data = myGeometryGroup1; 

// Add path shape to the UI. 
Canvas myCanvas = new Canvas(); 
myCanvas.Children.Add(myPath1); 
this.Content = myCanvas; 

我不能相信我不得不经历这一切只是为了添加一个简单的矩形对象!当我想改变一个矩形(例如通过拖动)时,我必须再次经历这一切?必须有一个更简单的方法。我该怎么办?

编辑:我不使用System.Windows.Shapes对象,因为我不能计算某个点(OnClick)是否存在。 System.Drawing.Rectangle可以做到这一点,但它要求的是矩形而不是点,即使文档中另有说明也是如此......另外,例如您不能在该矩形上设置OpacityStroke属性。

回答

0

为了找出一个Rectangle点击,你要么一个MouseDownMouseLeftButtonDown处理程序添加到矩形对象本身:

<Canvas> 
    <Rectangle Canvas.Left="100" Canvas.Top="100" Width="100" Height="100" 
       Fill="AliceBlue" MouseLeftButtonDown="Rectangle_MouseLeftButtonDown"/> 
</Canvas> 

private void Rectangle_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
{ 
    var rect = sender as Rectangle; 
    // do something 
} 

或致电画布InputHitTest和转换返回的对象Rectangle

<Canvas MouseLeftButtonDown="Canvas_MouseLeftButtonDown"> 
    <Rectangle Canvas.Left="100" Canvas.Top="100" Width="100" Height="100" 
       Fill="Transparent" Stroke="Black" StrokeThickness="2"/> 
</Canvas> 

private void Canvas_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
{ 
    var parent = sender as UIElement; 
    var rect = parent.InputHitTest(e.GetPosition(parent)) as Rectangle; 
    if (rect != null) 
    { 
     // do something 
    } 
} 

当然你也可以设置属性就像在一个System.Windows.Shapes.Rectangle OpacityStroke和。

+0

划伤我最后的评论,我马上试试吧! – Joetjah

+0

'InputHitTest'做到了诀窍!谢谢! – Joetjah