从C#项目的另一个cs文件内的DragCanvas_类获取两个变量的值的问题是DragCanvas错误吗?

问题描述

我有一个带有DragCanvas_类的WPF C#项目(请参见https://www.codeproject.com/Articles/15354/Dragging-Elements-in-a-Canvas),这样我就可以在Dragcanvas之间移动在WPF项目的MainWindow.xaml文件中创建的每个子元素。 ,即xaml代码中的<jas:DragCanvas_ x:Name="dragCanvas_"</jas:DragCanvas_>之间。通过鼠标(OnPreviewMouseLeftButtonDown(MouseButtonEventArgs e)拖动子元素来进行移动。

在DragCanvas_公共类中,我编写了以下代码,以便在我用鼠标四处移动时从DragCanvas获取子元素的坐标。我可以在运行时在控制台中使用DragCanvas_类中的Console.WriteLine();打印它们,但是我需要在MainWindow.xaml.cs文件中,即在MainWindow.xaml.cs类中,有两个坐标。在MainWindow.xaml.cs文件中是一种方法,必须使用这两个坐标来重新放置ROI_rectangles(DragCanvas_内部的元素以进行拖动)。

这是DragCanvas_.cs文件(DragCanvas_类)中的代码,用于获取DragCanvas_内可拖动元素的两个坐标LeftMargin和TopMargin:

protected override void OnPreviewMouseUp(MouseButtonEventArgs e)
        {
            base.OnPreviewMouseUp(e);

            var positionTransform = this.ElementBeingDragged.TransformToAncestor(this);
            var areaPosition = positionTransform.Transform(new Point(0,0));


            // Reset the field whether the left or right mouse button was 
            // released,in case a context menu was opened on the drag element.
            this.ElementBeingDragged = null;
            if (this.ElementBeingDragged != null)
            {
                this.ElementBeingDragged = null;
            }
            LeftMargin = areaPosition.X;
            TopMargin = areaPosition.Y;
            //Console.WriteLine(LeftMargin);//these two work of course,but I need the two variables inside a method in another class of the C# project
            //Console.WriteLine(TopMargin);

        }

在DragCanvas_类的开头,两个变量LeftMargin和TopMargin被声明为公共变量,如下所示:

public class DragCanvas_ : Canvas 
{

    public double LeftMargin { get; set; }
    public double TopMargin { get; set; }

 // the rest of the code...
}

要在MainWindow.xaml.cs文件中使用两个变量LeftMargin和TopMargin的几个值,我在MainWindow.xaml.cs文件中编写以下代码

namespace ABC
{
    public partial class MainWindow : Window
    static void Main(string[] args) 
    {
            
    
        DragCanvas_ myDragCanvasObject = new DragCanvas_(); // new instance of DragCanvas_ class
         if (myDragCanvasObject != null)
            {
                myDragCanvasObject = null;
            }

       Console.WriteLine(myDragCanvasObject.LeftMargin);
        Console.WriteLine(myDragCanvasObject.TopMargin); 

}

我还已经在public Window() : base() { }之间添加public partial class MainWindow : Windowstatic void Main(string[] args),但这也无济于事。

我真的不知道该怎么办,并且对这个问题感到绝望。我只是不知道原因可能是什么。非常感谢您的帮助。预先感谢。

解决方法

您不应在后面的代码中创建DragCanvas的新实例。相反,您应该访问已在XAML标记中添加的属性的属性:

Console.WriteLine(dragCanvas_.LeftMargin);
Console.WriteLine(dragCanvas_.TopMargin); 

“ dragCanvas_”是指XAML标记中元素的名称:

<jas:DragCanvas_ x:Name="dragCanvas_" ... />