.NET 多平台应用程序界面(.NET MAUI)指针手势识别器用于检测指针何时进入、退出或在视图中移动,并通过 PointerGestureRecognizer 类实现。 此类定义了以下属性:
- PointerEnteredCommand,类型为ICommand,是指当指针进入视图边界区域时调用的命令。
-
PointerEnteredCommandParameter,类型
object,它是传递给 PointerEnteredCommand的参数。 - PointerExitedCommand,类型 ICommand,这是当视图边界区域中的指针离开该边界区域时要调用的命令。
-
PointerExitedCommandParameter,类型
object,它是传递给 PointerExitedCommand的参数。 - PointerMovedCommand,类型为 ICommand,这是在指针在视图的边界区域内移动时要调用的命令。
-
PointerMovedCommandParameter,类型
object,它是传递给 PointerMovedCommand的参数。 - PointerPressedCommand,类型 ICommand,这是在指针启动视图内按下时要调用的命令。
-
PointerPressedCommandParameter 属于
object类型,是传递给 PointerPressedCommand 的参数。 - PointerReleasedCommand,类型 ICommand,它是在视图内释放之前启动按下的指针时要调用的命令。
-
PointerReleasedCommandParameter 属于
object类型,是传递给 PointerReleasedCommand 的参数。
这些属性由 BindableProperty 对象提供支持,表示它们可以是数据绑定的目标,并可以设置样式。
该 PointerGestureRecognizer 类还定义了以下事件:
- PointerEntered,当指针进入视图的边界区域时引发。
- PointerExited,当视图的边界区域中的指针离开该区域时,将触发一个事件。
- PointerMoved,当指针在视图的边界区域内移动时引发。
- PointerPressed,当指针在视图中开始按压时引发。
- PointerReleased,当先前启动按压的指针在视图内释放按压时引发。
对象 PointerEventArgs 附带事件,并定义一个 PlatformArgs 类型 PlatformPointerEventArgs 属性,该属性提供对事件特定于平台的参数的访问。
- Android
- iOS/Mac Catalyst
- Windows操作系统
在 Android 上,该 PlatformPointerEventArgs 类定义以下属性:
-
Sender,类型为View,表示附加到事件的本机视图。 -
MotionEvent类型 MotionEvent,表示绑定到视图的原生事件或处理程序。
此外,该PointerEventArgs对象还定义一个方法,该方法返回一个GetPositionPoint?对象,该对象表示检测到手势时指针的位置。 有关该方法的详细信息 GetPosition ,请参阅 “获取手势位置”。
重要
Android、iPadOS、Mac Catalyst 和 Windows 支持指针手势识别。
.NET MAUI 还定义了 PointerOver 视觉状态。 当鼠标光标悬停在视图上时,此状态可能会更改视图的视觉外观,但未按下鼠标按钮。 有关详细信息,请参阅 视觉状态。
创建 PointerGestureRecognizer
若要创建 View 识别指针手势,请创建一个 PointerGestureRecognizer 对象,处理所需的事件,并将手势识别器添加到 GestureRecognizers 视图上的集合。 或者,创建一个 PointerGestureRecognizer 对象,并将所需的命令绑定到 ICommand 实现,并将手势识别器添加到 GestureRecognizers 视图上的集合。
下面的代码示例演示 PointerGestureRecognizer 如何附加到 Image。 使用 PointerGestureRecognizer 事件来响应指针手势的检测:
<Image Source="dotnet_bot.png">
<Image.GestureRecognizers>
<PointerGestureRecognizer PointerEntered="OnPointerEntered"
PointerExited="OnPointerExited"
PointerMoved="OnPointerMoved" />
</Image.GestureRecognizers>
</Image>
事件处理程序的代码应添加到代码隐藏文件中:
void OnPointerEntered(object sender, PointerEventArgs e)
{
// Handle the pointer entered event
}
void OnPointerExited(object sender, PointerEventArgs e)
{
// Handle the pointer exited event
}
void OnPointerMoved(object sender, PointerEventArgs e)
{
// Handle the pointer moved event
}
等效的 C# 代码为:
PointerGestureRecognizer pointerGestureRecognizer = new PointerGestureRecognizer();
pointerGestureRecognizer.PointerEntered += (s, e) =>
{
// Handle the pointer entered event
};
pointerGestureRecognizer.PointerExited += (s, e) =>
{
// Handle the pointer exited event
};
pointerGestureRecognizer.PointerMoved += (s, e) =>
{
// Handle the pointer moved event
};
Image image = new Image();
image.GestureRecognizers.Add(pointerGestureRecognizer);
获取手势位置
可以通过对对象调用 GetPosition 方法 PointerEventArgs 获取指针手势的位置。 该方法 GetPosition 接受参数 Element? ,并将位置作为 Point? 对象返回:
void OnPointerExited(object sender, PointerEventArgs e)
{
// Position inside window
Point? windowPosition = e.GetPosition(null);
// Position relative to an Image
Point? relativeToImagePosition = e.GetPosition(image);
// Position relative to the container view
Point? relativeToContainerPosition = e.GetPosition((View)sender);
}
Element? 参数定义了获取位置时应相对的元素。 提供一个 null 值作为此参数意味着 GetPosition 该方法返回一个 Point? 对象,该对象定义指针手势在窗口内的位置。