从 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_" ... />
我有一个带有 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_" ... />