簡體   English   中英

使用UWP InkCanvas時如何獲取鼠標位置

[英]How do I get the mouse position when using a UWP InkCanvas

我正在使用C# UWP編寫程序,其中有覆蓋整個屏幕的Inkcanvas 在不禁用此InkCanvas的情況下,我想獲取鼠標位置。 我試圖設置一個這樣的事件:

MyInkCanvas.PointerMoved += MyInkCanvas_PointerMoved;

但是,此事件從未調用過,因為我猜它是由InkCanvas處理的。 相反,我嘗試執行以下操作:

MyInkCanvas.addHandler(PointerMovedEvent, new PointerEventHandler(MyInkCanvas_PointerMoved), true);

這也不起作用,這可能意味着我做錯了,因為AddHandler的文檔中說:

為指定的路由事件添加路由事件處理程序,將該處理程序添加到當前元素的處理程序集合中。 將handleEventsToo指定為true,即使事件在其他地方處理,也要調用提供的處理程序

如果我理解正確,即使InkCanvas首先處理該事件也應該使該事件發生。

我也曾嘗試將此代碼放到InkCanvas父母身上,結果相同。

因此,如何在不禁用InkCanvas的情況下獲得鼠標位置?

根據您的要求,您可以通過WetStrokeContinuing事件獲取鼠標位置。 它發生在InkPresenter開始處理墨水筆划之后且在停止處理相同筆划之前,這表明墨水數據繼續被捕獲。 您可以使用以下代碼獲取coreWetStrokeUpdateSource並訂閱WetStrokeContinuing事件。

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

coreWetStrokeUpdateSource.WetStrokeContinuing += CoreWetStrokeUpdateSource_WetStrokeContinuing;

您將在WetStrokeContinuing事件處理程序中獲得鼠標位置。

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}--");
}

StrokeContinued當筆畫輸入開始並由Windows.UI.Input.Inking.Ink.InkPresenter對象繼續捕獲時發生。

WetStrokeContinuing發生在Windows.UI.Input.Inking.InkPresenter開始處理墨水筆划之后且停止處理相同的筆划之前,這表明墨水數據繼續被捕獲。

結果是一樣的。 但是, StrokeContinued使用起來更方便。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM