0

我有课,它为我创建了形状(我试图创建某种“类工厂”,但我不确定这是否是我创建的正确术语。

问题在我的代码中的注释中进行了描述。

    public static Ellipse SomeCircle()
    {
        Ellipse e = new Ellipse();

        double size = 10;

        e.Height = size;
        e.Width = size;

        e.Fill = new SolidColorBrush(Colors.Orange);
        e.Fill.Opacity = 0.8;
        e.Stroke = new SolidColorBrush(Colors.Black);

        // i want to have something like this here:
        // canvas1.Children.Add(e);

        // but I cant access non-static canvas1 from here

        // I need this to place my ellipse in desired place 
        // (line below will not work if my Ellipse is not placed on canvas
        // e.Margin = new Thickness(p.X - e.Width * 2, p.Y - e.Height * 2, 0, 0);


        return e;
    }

我不知道如何解决这个问题。

我不想在整个应用程序中通过参数传递该画布......

4

1 回答 1

0

由于您不想将 Canvas 作为参数传递,您可以尝试创建一个可作用于 Canvas 对象的扩展方法。

namespace CustomExtensions
{
    public static class Shapes
    {
        public static Ellipse SomeCircle(this Canvas dest)
        {
            Ellipse e = new Ellipse();
            double size = 10;
            e.Height = size;
            e.Width = size;
            e.Fill = new SolidColorBrush(Colors.Orange);
            e.Fill.Opacity = 0.8;
            e.Stroke = new SolidColorBrush(Colors.Black);
            dest.Children.Add(e);
            return e;
        }
    }
}

用法记得将 CustomExtensions 命名空间添加到您的用法中。

canvas1.SomeCircle();
于 2013-07-15T02:56:58.823 回答