如何解决从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 : Window
和static void Main(string[] args)
,但这也无济于事。
我真的不知道该怎么办,并且对这个问题感到绝望。我只是不知道原因可能是什么。非常感谢您的帮助。预先感谢。
解决方法
您不应在后面的代码中创建DragCanvas
的新实例。相反,您应该访问已在XAML标记中添加的属性的属性:
Console.WriteLine(dragCanvas_.LeftMargin);
Console.WriteLine(dragCanvas_.TopMargin);
“ dragCanvas_”是指XAML标记中元素的名称:
<jas:DragCanvas_ x:Name="dragCanvas_" ... />
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。