我使用以下代码获取鼠标位置的像素坐标。
private void canvas_MouseMove(object sender, MouseEventArgs e)
{
startPoint = e.GetPosition(this);
}
但是,如果用户使用滚动条向下移动一点,则此代码不起作用。我得到了错误的坐标,并且没有在鼠标位置下绘制对象。有什么想法在这里发生什么?
答案 0 :(得分:1)
你正在做什么应该(或多或少)工作。但是,对于您正在收听的MouseMove
事件,您可能会遇到一些问题。
这是一个展示所需行为的示例应用。
XAML:
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid Margin="12">
<ScrollViewer Name="scrollViewer"
HorizontalScrollBarVisibility="Auto"
VerticalScrollBarVisibility="Auto"
MouseMove="ScrollViewer_MouseMove">
<Canvas Name="canvas" Width="800" Height="600" />
</ScrollViewer>
</Grid>
</Window>
代码隐藏:
using System.Windows;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Shapes;
namespace WpfApplication1
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void ScrollViewer_MouseMove(object sender, MouseEventArgs e)
{
Point mousePosition = e.GetPosition(canvas);
var rectangle = new Rectangle
{
RenderTransform = new TranslateTransform(
mousePosition.X,
mousePosition.Y),
Stroke = Brushes.Black,
};
canvas.Children.Add(rectangle);
}
}
}
此处的关键是我将MouseMove
事件绑定到ScrollViewer
,并检查了Canvas
的位置。