简体   繁体   中英

Window instances - how to get my main window canvas inside other class?

I have class, that creates Shapes for me (I tried to create some kind of "class factory" but im not sure if this is correct term for that I have created.

Problem is described in comments in my code.

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

I have no idea how to workaround this.

I don't want to pass that canvas by parameter in my whole application...

Since you do not want to pass your Canvas around as a parameter, you could try creating an Extension Method which would act on your Canvas Object.

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

Usage remember to add the CustomExtensions Namespace to your usings.

canvas1.SomeCircle();

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM