C# 使用UWP InkCanvas时如何获取鼠标位置

C# 使用UWP InkCanvas时如何获取鼠标位置,c#,uwp,C#,Uwp,我正在使用C#UWP编写一个程序,其中Inkcanvas覆盖了整个屏幕。在不禁用此InkCanvas的情况下,我希望获得鼠标位置。我尝试过设置这样一个事件: MyInkCanvas.PointerMoved += MyInkCanvas_PointerMoved; 但是,这个事件从未被调用,因为我猜它是由InkCanvas处理的。相反,我试着做以下几点: MyInkCanvas.addHandler(PointerMovedEvent, new PointerEventHandler(MyIn

我正在使用
C#UWP
编写一个程序,其中
Inkcanvas
覆盖了整个屏幕。在不禁用此InkCanvas的情况下,我希望获得鼠标位置。我尝试过设置这样一个事件:

MyInkCanvas.PointerMoved += MyInkCanvas_PointerMoved;
但是,这个事件从未被调用,因为我猜它是由InkCanvas处理的。相反,我试着做以下几点:

MyInkCanvas.addHandler(PointerMovedEvent, new PointerEventHandler(MyInkCanvas_PointerMoved), true);
这也不起作用,这可能意味着我做错了什么,因为AddHandler的文档说明:

为指定的路由事件添加路由事件处理程序,将该处理程序添加到当前元素的处理程序集合中。将HandledEventsTo指定为true,以便调用提供的处理程序,即使该事件在别处处理

如果我理解正确,即使InkCanvas首先处理事件,也应该使事件发生

我还尝试将此代码放在InkCanvas上,得到了相同的结果


那么,如何在不禁用InkCanvas的情况下获取鼠标位置?

根据您的要求,您可以通过事件获取鼠标位置。它发生在
InkPresenter
开始处理墨迹笔划之后和停止处理同一笔划之前,表示墨迹数据继续被捕获。您可以使用以下代码和 订阅
wetstrokecontinue
事件

CoreWetStrokeUpdateSource coreWetStrokeUpdateSource = CoreWetStrokeUpdateSource.Create(MyInkCanvas.InkPresenter);

coreWetStrokeUpdateSource.WetStrokeContinuing += CoreWetStrokeUpdateSource_WetStrokeContinuing;
您将在
wetstrokecontinue
事件处理程序中获得鼠标位置

private void CoreWetStrokeUpdateSource_WetStrokeContinuing(CoreWetStrokeUpdateSource sender, CoreWetStrokeUpdateEventArgs args)
{
    var points = args.NewInkPoints;
    foreach (var point in points)
    {
        Debug.WriteLine($"-----{ point.Position.X}--- {point.Position.Y}--");
    }
}
您还可以使用
PointerEventArgs
获取位置,两者的区别在于触发时间不同

private void StrokeInput_StrokeContinued(Windows.UI.Input.Inking.InkStrokeInput sender, Windows.UI.Core.PointerEventArgs args)
{
    var position = args.CurrentPoint.Position;
    Debug.WriteLine($"-----{ position.X}--- {position.Y}--");
}
当笔划输入开始并继续被Windows.UI.input.Inking.InkPresenter对象捕获时,会出现
StrokeContinued

在Windows.UI.Input.Inking.InkPresenter开始处理墨水后,会出现
WetstrokeContinue
笔划和停止处理同一笔划之前,表示继续捕获墨水数据


结果是一样的。但是,
StrokeContinued
使用起来更方便。

这非常好用。一个简单的问题:我发现我也可以使用
MyInkCanvas.InkPresenter.StrokeInput.StrokeContinued+=StrokeInput\u StrokeContinued
哪些接缝对我来说做同样的事情。你知道在我的案例中,这两者之间有没有什么特别的区别,可以让一个比另一个更好?