Для моего приложения я хотел бы использовать все встроенные возможности манипуляции, такие как, например, масштабирование.Но если пользователь нажимает 3 пальца на экране, я хотел бы показать определенный элемент пользовательского интерфейса.Итак, как лучше всего проверить, нажал ли пользователь 3 пальца одновременно и рядом друг с другом на экране?(без отключения встроенных возможностей манипуляции).
Мой первый подход состоял в том, чтобы зарегистрировать событие TouchDown в верхнем элементе Grid моего макета.В обработчике событий я получаю контакт.Но что там делать?
Просто проверьте, является ли контакт отпечатком пальца, сохраните его в списке и убедитесь, что в списке уже есть два похожих контакта?
Или есть более сексуальныйрешение?
Спасибо!
Редактировать:
После ответа я написал два метода:
private void OnContactDown(object sender, ContactEventArgs e)
{
if (this.ContactsOver.Count == 3)
{
Console.WriteLine("3 contacts down. Check proximity");
if (areNear(this.ContactsOver))
{
Console.WriteLine("3 fingers down!");
}
}
}
private Boolean areNear(ReadOnlyContactCollection contacts)
{
if ( Math.Abs(contacts.ElementAt(0).GetCenterPosition(this).X - contacts.ElementAt(1).GetCenterPosition(this).X) < 100 &&
Math.Abs(contacts.ElementAt(0).GetCenterPosition(this).Y - contacts.ElementAt(1).GetCenterPosition(this).Y) < 100 &&
Math.Abs(contacts.ElementAt(1).GetCenterPosition(this).X - contacts.ElementAt(2).GetCenterPosition(this).X) < 100 &&
Math.Abs(contacts.ElementAt(1).GetCenterPosition(this).Y - contacts.ElementAt(2).GetCenterPosition(this).Y) < 100 &&
Math.Abs(contacts.ElementAt(0).GetCenterPosition(this).X - contacts.ElementAt(2).GetCenterPosition(this).X) < 100 &&
Math.Abs(contacts.ElementAt(0).GetCenterPosition(this).Y - contacts.ElementAt(2).GetCenterPosition(this).Y) < 100)
{
return true;
}
else
{
return false;
}
}
Они должны быть переписаны, но это работает,И порог (атм 100) должен быть отрегулирован.