2

楕円、線、および長方形を描画する簡単なアプリケーションがあります。

コード:

 private void Canvas_MouseDown(object sender, MouseButtonEventArgs e)
    {
        startPoint = e.GetPosition(canvas);

        if(figura == "linia")
        {
            linia = new Line
            {
                Stroke = Brushes.LightBlue,
                StrokeThickness = 2
            };

            canvas.Children.Add(linia);
        }

        if (figura == "kwadrat")
        {
            rect = new Rectangle
            {
                Stroke = Brushes.LightBlue,
                StrokeThickness = 2
            };

            Canvas.SetLeft(rect, startPoint.X);
            Canvas.SetTop(rect, startPoint.X);

            canvas.Children.Add(rect);
        }

        else if (figura == "kolko")
        {
            circ = new Ellipse
            {
                Stroke = Brushes.LightBlue,
                StrokeThickness = 2
            };

            Canvas.SetLeft(circ, startPoint.X);
            Canvas.SetTop(circ, startPoint.X);

            canvas.Children.Add(circ);
        }
    }

    private void Canvas_MouseMove(object sender, MouseEventArgs e)
    {
        if (e.LeftButton == MouseButtonState.Released || rect == null && circ == null && linia == null)
            return;

        var pos = e.GetPosition(canvas);

        var x = Math.Min(pos.X, startPoint.X);
        var y = Math.Min(pos.Y, startPoint.Y);

        var w = Math.Max(pos.X, startPoint.X) - x;
        var h = Math.Max(pos.Y, startPoint.Y) - y;

        if(figura == "linia")
        {
            linia.X1 = startPoint.X;
            linia.Y1 = startPoint.Y;
            linia.X2 = pos.X;
            linia.Y2 = pos.Y;
        }

        if (figura == "kwadrat")
        {
            rect.Width = w;
            rect.Height = h;

            Canvas.SetLeft(rect, x);
            Canvas.SetTop(rect, y);
        }

        if (figura == "kolko")
        {
            circ.Width = w;
            circ.Height = h;

            Canvas.SetLeft(circ, x);
            Canvas.SetTop(circ, y);
        }
    }
    private void Canvas_MouseUp(object sender, MouseButtonEventArgs e)
    {
        rect = null;
        circ = null;
    }

今、サイズ変更、移動などのオブジェクトで何かをしたいと思っています。マウスでクリックしたとき。マウスでクリックされたオブジェクトを見つける方法がわかりません。手伝って頂けますか ?

4

2 に答える 2

3

e.OriginalSource実際にクリックされたコントロールを取得します。

于 2013-04-22T16:06:29.463 に答える
2

RoutedEvent.Source プロパティを使用します。

if (e.Source is Rectangle)
{
}
else if (e.Source is Ellipse)
{
}
else if (e.Source is Line)
{
}
于 2013-04-22T16:06:30.113 に答える