我有一个Border
(包含Canvas
内)如下,我想动态显示鼠标的位置移动在Canvas
时:了解边境的属性
在.xmal
:
<Border x:Name="cwgLayoutDesignBorder" BorderThickness="0"
Width="600" Height="800" BorderBrush="Yellow">
<ItemsControl x:Name="linecontrol">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas Background="Green" MouseMove="Canvas_MouseMove"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Canvas>
...
</Canvas>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Border>
在.cs
:
private void Canvas_MouseMove(object sender, MouseEventArgs e)
{
Point p = e.GetPosition(linecontrol);
this.Title = "(" + Convert.ToInt32(p.X) + ", " + Convert.ToInt32(p.Y) + ")";
}
我发现鼠标返回的位置竟然是:x
[0, 600]
和y
在[1, 800]
。但是,根据我的定义,我认为结果应该是[0, 599]
和y
而不是[0, 799]
。他们为什么不一致?或者我应该如何获得鼠标的正确位置?
谢谢。但为什么我在[0,600]中得到'x,在[1,800]'中得到'y? – herohuyongtao
我从你的示例代码中获得了0,600 0,800,如果你放大,实际的画布像素是0,599 0,799,你会看到600和800实际上是在画布的边缘。 – safetyOtter
但我得到了0.50 x 0.50与同样的实验在一个空的窗口只有一个50x50的画布,而像素只填充0,49 x 0,49;所以我不认为它与你的画布如何获得它的大小有关,只是GetPosition的工作方式。 /耸耸肩 – safetyOtter