共用方式為


辨識指標筆勢

.NET 多平臺應用程式 UI (.NET MAUI) 指標手勢辨識器會偵測指標何時進入、結束及移動檢視,並使用 類別實作 PointerGestureRecognizer 。 這個類別會定義下列屬性:

這些屬性是由 BindableProperty 物件所支援,這表示這些屬性可以是數據系結的目標,並設定樣式。

類別 PointerGestureRecognizer 也會定義下列事件:

  • PointerEntered,當指標進入檢視的周框區域時,就會引發。
  • PointerExited,當檢視界限區域中的指標離開該周框區域時,就會引發。
  • PointerMoved,當指標在檢視的周框區域內移動時,就會引發這個值。
  • PointerPressed,當指標在檢視中起始按下時,就會引發。
  • PointerReleased,會在檢視內釋放先前起始按下的指標時引發。

PointerEventArgs物件會伴隨事件,並定義 PlatformArgs 類型的PlatformPointerEventArgs屬性,以提供事件平臺特定自變數的存取權。

在 Android 上,類別 PlatformPointerEventArgs 會定義下列屬性:

  • SenderView別為 的 ,表示附加至事件的原生檢視。
  • MotionEventMotionEvent別為 的 ,表示附加至檢視的原生事件或處理程式。

此外, 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?物件,該物件會定義指標筆勢在視窗內的位置。