Подтвердить что ты не робот

Являются ли Click, Tapped и PointerPressed синонимом в WinRT-XAML?

Имеет ли значение, создаю ли я обработчики событий для PointerPressed, Click или Tapped? IOW, есть ли функциональная разница между следующим:

<Button x:Name="BackButton" PointerPressed="BackButton_Click"/>    
<Button x:Name="BackButton" Click="BackButton_Click"/>    
<Button x:Name="BackButton" Tapped="BackButton_Click"/>

?

4b9b3361

Ответ 1

Нажмите, чтобы получить обратную совместимость, и по сути это то же самое, что и Tapped. Tapped - это "жест высокого уровня", который автоматически преобразуется в щелчок, нажатие, нажатие пера и т.д., И это то, что я рекомендовал бы использовать.

PointerPressed - это не то, что вы хотите. Вот почему: если я нажимаю и удерживаю, событие PointerPressed срабатывает, когда я изначально "нажимаю", а затем загорается PointerReleased. Это более низкий уровень, и вы можете принимать решения о том, как долго он был нажат, и т.д. Обычно длинное нажатие не является тем, что вы хотите рассмотреть "Click" или "Tap" , потому что по определению Tap - это более короткая продолжительность. Поэтому для того, что вы хотите, "Tap" лучше всего передает его, потому что он переводит жест для вас, используя системный тайм, для того, что считается "Tap" , и удерживает трюк, и автоматически продвигает клики и ручные нажатия на одно и то же событие. PointerPressed будет срабатывать при нажатии любой кнопки или нажатии пальца независимо от того, как долго длится взаимодействие.

У меня есть довольно активное приложение, которое демонстрирует различные взаимодействия, которые вы можете скачать из http://windows8applications.codeplex.com - просто обратитесь к образцу главы 4, который называется "Touch."

Ответ 2

Ответ Джереми не совсем точен. В другом потоке кто-то сообщил о наличии проблемы с кранами, которые не работают так же, как щелчки при быстром нажатии и нажатии, и их легко воспроизвести с помощью кода ниже и можно легко расширяться до событий указателя.

public sealed partial class MainPage : Page
{
    private int clicks = 0;
    private int taps = 0;
    public MainPage()
    {
        this.InitializeComponent();
        var button = new Button();
        button.Width = 500;
        button.Height = 200;
        button.Content = string.Format("Clicks: {0}, Taps: {1}", clicks, taps);
        button.Click += (s, e) => button.Content = string.Format("Clicks: {0}, Taps: {1}", ++clicks, taps);
        button.Tapped += (s, e) => button.Content = string.Format("Clicks: {0}, Taps: {1}", clicks, ++taps);
        this.Content = button;
    }
}

Click - это то, что вы должны обрабатывать на обычной кнопке. У этого есть логика, ожидаемая от кнопки. Среди вещей, о которых я могу думать,

  • он работает как с клавиатурой, так и с помощью мыши
  • он работает, даже если вы нажмете кнопку и медленно отпустите ее
  • его можно отменить, когда вы нажимаете, перетаскивая его от кнопки, а также возобновляете, перетаскивая назад к нему, предварительно нажав кнопку
  • он ограничен одной кнопкой за раз, поэтому, если вы попытаетесь щелкнуть две кнопки вместе - первый коснулся не будет щелчком (иначе, чем на исходном Surface/PixelSense, который поддерживает многопользовательские взаимодействия!)
  • он, вероятно, работает лучше с такими вещами, как автоматизация и, как таковой, с возможностями доступности Windows
  • он всегда работает

Как показано в примере кода - событие Tapped не регистрируется для всех кранов, если вы нажимаете повторно. Я не уверен, что это связано с тем, что какая-то базовая логика распознавания жестов видит несколько двойных кранов или просто отвергает все остальные нажатия по любой другой причине. Он работает для быстрых однократных нажатий/ручек или щелчков мыши, но является общим событием, которое вы можете обрабатывать на любом UIElement и может использоваться, если вы хотите различать краны, двойные краны, правые ответвления (!) Или удерживать произвольные элементы пользовательского интерфейса.

События указателей более низкого уровня, и вы можете использовать их для обработки немного более продвинутых взаимодействий, которые еще не встроены в структуру. Как я уже упоминал, щелчок состоит из нажатия и сопутствующего выпуска, которые происходят на кнопке, поэтому подобное взаимодействие можно смоделировать с помощью событий указателя. Например, вы можете использовать его для реализации своего рода типа игры Whac-A-Mole/Twister, в котором вы хотели бы смять много элементов интерфейса одновременно, что вы не могли сделать с кликами.

Ответ 3

Вам следует использовать кнопки "Click for Buttons" (и ListView, Hyperlink, MenuFlyoutItem, ContentDialog и т.д.). Tapped - это просто событие указателя, поэтому он не запускается, если вы используете клавиатуру, ключ доступа или автоматизацию.

Ответ 4

Я знаю, что это старая тема, но победный ответ неверен, когда говорится, что Click и Tapped по сути одинаковы. Они не. Если вам нужен быстрый щелчок в элементе управления, Tapped не отвечает с той же скоростью, что и Click.

В очень специфических сценариях, например, в настраиваемой цифровой клавиатуре, если пользователь хочет ввести значение, например "11" (дважды нажав одну и ту же кнопку), когда вы используете Tapped, вы часто пропускаете второй символ Таким образом, вы получаете "1", а не "11". Нажмите, этого не происходит.

пс.: Я использую UWP