Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 窗口实例-如何在其他类中获取我的主窗口画布?_C#_Wpf_Object_Instance - Fatal编程技术网

C# 窗口实例-如何在其他类中获取我的主窗口画布?

C# 窗口实例-如何在其他类中获取我的主窗口画布?,c#,wpf,object,instance,C#,Wpf,Object,Instance,我有一个为我创建形状的类(我试图创建某种“类工厂”,但我不确定这是否是我创建的正确术语) 问题在我的代码中的注释中描述 public static Ellipse SomeCircle() { Ellipse e = new Ellipse(); double size = 10; e.Height = size; e.Width = size; e.Fill = new SolidColorB

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

问题在我的代码中的注释中描述

    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;
    }
我不知道如何解决这个问题


我不想在整个应用程序中按参数传递画布…

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

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();

我已经在使用这个方法了。我有很多像这样的对象,我不喜欢到处传递“canvas1”的代码。但是……如果这是正确完成它的唯一方法,我会继续使用它并承受:)我想我会继续在参数中传递canvas。我对扩展有点熟悉。谢谢