Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.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_Canvas - Fatal编程技术网

如何在c#中从另一个类调用方法?

如何在c#中从另一个类调用方法?,c#,wpf,canvas,C#,Wpf,Canvas,在C#中,我有一个类,其方法如下: namespace ControlCenter { public partial class Canvas { ... public void display(string itemID) { ... // here assign some properties to the item this.Children.Add(item);

在C#中,我有一个类,其方法如下:

namespace ControlCenter
{
    public partial class Canvas
    {
        ...
        public void display(string itemID)
        {
            ... // here assign some properties to the item
            this.Children.Add(item);
        }
    }
}
namespace ControlCenter
{
    public class addLayer
    {
        private ControlCenter.Canvas myCanvas = new ControlCenter.Canvas();

        public void add()
        {
            myCanvas.display("1234");
        }
    }
}
此函数允许我将项目成功添加到画布。现在我想在另一个不同的类中调用此方法,如下所示:

namespace ControlCenter
{
    public partial class Canvas
    {
        ...
        public void display(string itemID)
        {
            ... // here assign some properties to the item
            this.Children.Add(item);
        }
    }
}
namespace ControlCenter
{
    public class addLayer
    {
        private ControlCenter.Canvas myCanvas = new ControlCenter.Canvas();

        public void add()
        {
            myCanvas.display("1234");
        }
    }
}
但这无法将任何项目添加到我的画布。通过调试,我怀疑问题应该在这一行:

this.Children.Add(item);

当从
addLayer
类调用
display
方法时,
我想这并不指向活动画布。但即使在大规模的互联网搜索之后,我也找不到任何解决方案。有什么帮助吗?

在所示的示例中,我猜canvas是一个UserControl,您的目标是在调用
add()
方法时向该UserControl添加一个项。但是在当前的示例中,在
addlayer
类中,您已经创建了一个全新的画布,并在其中添加了一个项目。只要您将子对象添加到一个全新的
画布
,该画布不会显示,该方法就可以工作。解决方法是将显示的画布实例传递给
addlayer
类。在InitialiseComponent()方法之后

就像这样

namespace ControlCenter
{
    public partial class Canvas : UserControl
    {

        public Canvas
        {
          InitialiseComponent();
          addLayer.myCanvas = this;

        }

        public void display(string itemID)
        {
            ... // here assign some properties to the item
            this.Children.Add(item);
        }
    }
}


namespace ControlCenter
{
    public static class addLayer
    {
        private static ControlCenter.Canvas myCanvas;

        public static void add()
        {
            myCanvas.display("1234");
        }
    }
}

现在,当您调用addLayer.add()时,您将向显示的画布添加一个项目

项目和项目ID都不同??如何调用
addLayer
实例?(顺便说一句,这听起来更像是一个方法名而不是类名)是的,itemID和item是不同的。“item”是另一个名为“DesignerItem”的类类型,itemID是一个字符串
然后调用
addLayer.add()
方法。
new
意味着它将创建类的新实例,您需要研究如何传递对象,而不是创建一个新实例谢谢您的回答。现在又出现了另一个问题:它找不到“InitializeComponent()”方法。我的代码在“.cs”文件中,web上的各种回答都说应该有一个“.xaml”文件,我应该正确地将“x:Class”更改为名称空间。但是我这里没有这个类的“.xaml”文件。你知道吗?我想让你的canvas类从UserControl继承。虽然我想说已经有了一个
Canvas
类,但我想这取决于你想做什么