Распознавание жеста касания
Распознаватель жестов касания .NET Multi-platform App UI (.NET MAUI) используется для обнаружения касаний и реализуется с TapGestureRecognizer помощью класса. Этот класс определяет приведенные ниже свойства.
- ButtonsButtonsMaskтип , который определяет, активирует ли основная или вторичная кнопка мыши или оба, активирует жест в Android, Mac Catalyst и Windows. Дополнительные сведения см. в разделе "Определение маски кнопок".
- Command, тип ICommand, который выполняется при распознавании касания.
- CommandParameter с типом
object
, который передается как параметр вCommand
. - NumberOfTapsRequired
int
тип, представляющий количество касаний, необходимых для распознавания жеста касания. Значение этого свойства по умолчанию равно 1.
Эти свойства поддерживаются объектами BindableProperty, то есть эти свойства можно указывать в качестве целевых для привязки и стилизации данных.
Класс TapGestureRecognizer также определяет событие, которое возникает Tapped при распознавании касания. Объект TappedEventArgs , который сопровождает Tapped событие, определяет Parameter свойство типа object
, указывающее значение, переданное CommandParameter
свойством, если определено. Объект TappedEventArgs также определяет Buttons свойство и GetPosition
метод. Свойство Buttons имеет тип ButtonsMaskи может использоваться для определения того, активируется ли основная или вторичная кнопка мыши распознаватель жестов в Android, Mac Catalyst и Windows. Метод GetPosition
возвращает Point?
объект, представляющий позицию, в которой обнаружен жест касания. Дополнительные сведения о масках кнопок см. в разделе "Определение маски кнопки". Дополнительные сведения о методе см. в разделе "Получение позиции жестаGetPosition
".
Предупреждение
Не TapGestureRecognizer удается распознать больше двойного касания в Windows.
Создание TapGestureRecognizer
View Чтобы распознать жест касания, создайте TapGestureRecognizer объект, обработайте Tapped событие и добавьте в коллекцию новый распознаватель GestureRecognizers
жестов в представлении. В следующем примере кода показан присоединенный к объекту TapGestureRecognizerImage:
<Image Source="dotnet_bot.png">
<Image.GestureRecognizers>
<TapGestureRecognizer Tapped="OnTapGestureRecognizerTapped"
NumberOfTapsRequired="2" />
</Image.GestureRecognizers>
</Image>
Код обработчика OnTapGestureRecognizerTapped
событий должен быть добавлен в файл программной части:
void OnTapGestureRecognizerTapped(object sender, TappedEventArgs args)
{
// Handle the tap
}
Эквивалентный код на C# выглядит так:
TapGestureRecognizer tapGestureRecognizer = new TapGestureRecognizer();
tapGestureRecognizer.Tapped += (s, e) =>
{
// Handle the tap
};
Image image = new Image();
image.GestureRecognizers.Add(tapGestureRecognizer);
По умолчанию ответит Image на одиночные касания. NumberOfTapsRequired Если свойству присвоено значение больше одного, обработчик событий будет выполняться только в том случае, если касания происходят в течение заданного периода времени. Если второй (или последующий) касания не происходят в течение этого периода, они фактически игнорируются.
Определение маски кнопки
Объект TapGestureRecognizer имеет Buttons свойство типа, определяющее, ButtonsMaskактивирует ли основная или вторичная кнопка мыши или оба, активирует жест в Android, Mac Catalyst и Windows. Перечисление ButtonsMask определяет следующие члены:
- Primary представляет основную кнопку мыши, которая обычно является левой кнопкой мыши.
- Secondary представляет вторичную кнопку мыши, которая обычно является правой кнопкой мыши.
В следующем примере показано TapGestureRecognizer , как обнаружить касания с помощью вторичной кнопки мыши:
<Image Source="dotnet_bot.png">
<Image.GestureRecognizers>
<TapGestureRecognizer Tapped="OnTapGestureRecognizerTapped"
Buttons="Secondary" />
</Image.GestureRecognizers>
</Image>
Обработчик событий для Tapped события может определить, какая кнопка активировала жест:
void OnTapGestureRecognizerTapped(object sender, TappedEventArgs args)
{
// Handle the tap
if (args.Buttons == ButtonsMask.Secondary)
{
// Do something
}
}
Эквивалентный код на C# выглядит так:
TapGestureRecognizer tapGestureRecognizer = new TapGestureRecognizer
{
Buttons = ButtonsMask.Secondary
};
tapGestureRecognizer.Tapped += (s, e) =>
{
// Handle the tap
if (args.Buttons == ButtonsMask.Secondary)
{
// Do something
}
};
Image image = new Image();
image.GestureRecognizers.Add(tapGestureRecognizer);
Предупреждение
В Windows свойство не TapGestureRecognizerButtons
Secondary
учитывается NumberOfTapsRequired , если оно больше одного.
Кроме того, можно определить объект TapGestureRecognizer , чтобы основная или вторичная кнопка мыши активировала жест:
<TapGestureRecognizer Tapped="OnTapGestureRecognizerTapped"
Buttons="Primary,Secondary" />
Эквивалентный код на C# выглядит так:
TapGestureRecognizer tapGestureRecognizer = new TapGestureRecognizer
{
Buttons = ButtonsMask.Primary | ButtonsMask.Secondary
};
Получение позиции жеста
Положение, в котором произошло касание жеста, можно получить путем вызова GetPosition
метода в объекте TappedEventArgs . Метод GetPosition
принимает Element?
аргумент и возвращает позицию в качестве Point?
объекта:
void OnTapGestureRecognizerTapped(object sender, TappedEventArgs 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?
объект, определяющий положение жеста касания в окне.