我有一个简单的UserControl实现如下 - 我放在Canvas中。我使用Multi-touch移动它,我希望能够使用程序C#代码读取它的新X,Y位置。理想情况下,我希望将X和Y作为两个属性或作为点(X,Y)。
<UserControl x:Class="TouchControlLibrary.myControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="64" d:DesignWidth="104">
<Border Name="ControlBorder" BorderThickness="1" BorderBrush="Black">
<DockPanel Margin="1" Height="60 " Width="100">
<StackPanel DockPanel.Dock="Left" Background="Gray" Width="20" >
<Button Background="#FFDEDE53" Padding="0">In</Button>
</StackPanel>
<StackPanel DockPanel.Dock="Right" Background="Gray" Width="20" >
<Button Background="#FFE8B48F" Padding="0">Out</Button>
</StackPanel>
</DockPanel>
</Border>
</UserControl>
我希望能够为'X'和'Y'中的每一个创建一个附加属性,并使用绑定或某种形式的附加属性或者完全不同的东西从Canvas.Left和Canvas.Top填充它们。 / p>
然而,尽管花了相当长的时间寻找解决方案,但到目前为止我发现的所有内容似乎都“不太需要”。
你建议我做些什么来解决这个问题?
答案 0 :(得分:1)
让我看看我是否有这个权利,你创建一个新的用户控件实例并将其添加到画布?然后使用Multi-touch移动它(你怎么做?通过行为或手动?),并且在任何时候你想要读取用户控件实例相对于Canvas的新X / Y位置?
为什么你只能读到通过触摸移动它时被改变的东西?您是否看过RenderTransform属性,当您使用行为或手动调整操作某些内容时,通常会更改此属性。
答案 1 :(得分:1)
嗯,这是我要获得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;