0

Canvas にRectオブジェクトを追加しようとしています。Rectangle オブジェクトを使用すると、Canvas に簡単に追加できます。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 を (たとえばドラッグして) 変更したい場合、これをすべてやり直さなければなりませんか? もっと簡単な方法があるはずです。私は何をすべきか?

編集: System.Windows.Shapesオブジェクトは使用しません。特定の Point (OnClick) が存在するかどうかを計算できないためです。System.Drawing.Rectangleはそれを行うことができますが、ドキュメントには別の記載がありますが、Point ではなく Rectangle を要求しています...また、たとえばその Rectangle に属性Opacityまたは属性を設定することはできません。Stroke

4

1 に答える 1

0

Rectangleがクリックされたかどうかを確認するには、 Rectangle オブジェクト自体にMouseDownまたはハンドラーを追加します。MouseLeftButtonDown

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

または Canvas を呼び出し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 Opacityなどのプロパティを設定することもできます。Stroke

于 2013-05-16T11:59:05.290 に答える