Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.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# 如何获取画布中UserControl的X,Y位置?_C#_Wpf_User Controls_Attached Properties - Fatal编程技术网

C# 如何获取画布中UserControl的X,Y位置?

C# 如何获取画布中UserControl的X,Y位置?,c#,wpf,user-controls,attached-properties,C#,Wpf,User Controls,Attached Properties,我有一个简单的UserControl实现如下-我把它放在画布上。我使用多点触摸移动它,我希望能够使用程序C#代码读取它的新X,Y位置。理想情况下,我希望将X和Y作为两个属性或一个点(X,Y) 在里面 出来 我希望能够为“X”和“Y”中的每一个创建一个附加属性,并从Canvas.Left和Canvas.Top填充它们,使用绑定或某种形式的附加属性,或者完全使用其他东西 然而,尽管花了相当多的时间寻找解决方案,但到目前为止,我发现的一切似乎都是“不太需要的” 您建议我如何解决此问题?让我看看我是

我有一个简单的UserControl实现如下-我把它放在画布上。我使用多点触摸移动它,我希望能够使用程序C#代码读取它的新X,Y位置。理想情况下,我希望将X和Y作为两个属性或一个点(X,Y)


在里面
出来
我希望能够为“X”和“Y”中的每一个创建一个附加属性,并从Canvas.Left和Canvas.Top填充它们,使用绑定或某种形式的附加属性,或者完全使用其他东西

然而,尽管花了相当多的时间寻找解决方案,但到目前为止,我发现的一切似乎都是“不太需要的”


您建议我如何解决此问题?

让我看看我是否有此权利,您可以创建用户控件的新实例并将其添加到画布中?然后使用多点触摸移动它(您是如何做到的?通过行为还是手动?),并在任何时候读取用户控件实例相对于画布的新X/Y位置


当你通过触摸移动它时,为什么你不能只阅读正在被改变的东西?你看过RenderTransform属性了吗?这是当你使用行为或手动调整操作某些东西时通常会改变的属性。

好吧,这里有一个示例代码,我可以得到Y,你可以算出X 希望这就是你所需要的:

Point current = e.GetPosition(MyControl as UIElement); //where your control is
Point top = e.GetPosition(Canvas as UIElement); //or maybe just the height of the canvas
Thickness margin = new Thickness();
margin.Top = top.Y - current.Y; //distance from the top
MyControl.Margin = margin;

您的描述是正确的-我使用触摸手动移动它。我已经能够通过以下方式获得位置:Mp=element.TranslatePoint(新点(0,0),null);其中元素是我的控件,Mp是点结构。然后我使用Mp.X和Mp.Y,但是我希望将X,Y封装为控件的属性并简化访问。也许我正试图做错事。顺便说一句,这是我的第一篇帖子,我最终两次提交了同样的问题!对此很抱歉。非常感谢,我会尝试这个-根据我的其他评论,我试图将其封装在控件本身中。这可能是错误的做法!
Point current = e.GetPosition(MyControl as UIElement); //where your control is
Point top = e.GetPosition(Canvas as UIElement); //or maybe just the height of the canvas
Thickness margin = new Thickness();
margin.Top = top.Y - current.Y; //distance from the top
MyControl.Margin = margin;