从 C# project.Is 的另一个 cs 文件中的 DragCanvas_ class 获取两个变量的值时出现问题,这是 DragCanvas 错误吗?

Problems for getting the values of two variables from the DragCanvas_ class inside another cs-file of the C# project.Is it the DragCanvas fault?

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

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

这里是 DragCanvas_.cs 文件(DragCanvas_ class)中的代码,用于获取 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_class开头声明了LeftMargin和TopMargin这两个变量public如下:

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 partial class MainWindow : Window 之间添加了 public Window() : base() { }static void Main(string[] args),但这也无济于事。

我真的不知道该怎么办,对这个问题很绝望。我只是想不通可能是什么原因。非常感谢您的帮助。提前致谢。

您不应在 code-behind 中创建 DragCanvas 的新实例。相反,您应该访问已添加到 XAML 标记中的属性:

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

"dragCanvas_" 引用 XAML 标记中的元素名称:

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