2013-05-16 3 views
0

Я пытаюсь добавить Rect -объект на холст. Используя объект 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; 

Я не могу поверить, что я должен пройти через все это просто добавить простой Rect-объект! И когда я хочу изменить Rect (например, перетаскивая), мне нужно все это повторить? Должен быть более простой способ. Что мне делать?

EDIT: Я не использую объект System.Windows.Shapes, потому что не могу вычислить, существует ли определенная точка (OnClick). System.Drawing.Rectangle может это сделать, но он запрашивает прямоугольник вместо точки, хотя в документации говорится об ином ... Кроме того, вы не можете установить атрибуты Opacity или Stroke, например, на этом прямоугольнике.

ответ

0

Для того, чтобы выяснить, если Rectangle нажата, вы должны либо добавить MouseDown или MouseLeftButtonDown обработчик самого объекта Rectangle:

<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 
    } 
} 

И, конечно, вы можете установить свойство, как Opacity или Stroke на System.Windows.Shapes.Rectangle .

+0

Поцарапайте свой последний комментарий, я собираюсь попробовать его немедленно! – Joetjah

+0

'InputHitTest' сделал трюк! Спасибо! – Joetjah

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