辨識指標筆勢
.NET 多平臺應用程式 UI (.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 上,類別 PlatformPointerEventArgs 會定義下列屬性:
Sender
型 View別為 的 ,表示附加至事件的原生檢視。MotionEvent
型 MotionEvent別為 的 ,表示附加至檢視的原生事件或處理程式。
此外, PointerEventArgs 物件會 GetPosition 定義方法,這個方法會傳回 Point?
物件,代表偵測到筆勢時指標的位置。 如需 方法的詳細資訊 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);
取得手勢位置
在物件上PointerEventArgs呼叫 GetPosition 方法,即可取得指標手勢的位置。 方法 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?
物件,該物件會定義指標筆勢在視窗內的位置。