[英]How do I control an InkCanvas to only start drawing when mouse is at a specific position
[英]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.