Как остановить поворотный элемент управления WP7, обрабатывающий событие Flick Gesture в Silverlight Toolkit

У меня есть Pivot Control в моем приложении WP7, которое по своей природе реагирует на свайпы влево и вправо для перемещения между элементами Pivot.

Затем я хочу использовать Flick Gesture для UserControl (небольшой сегмент пользовательского интерфейса на моей странице) для чего-то еще.

Мой пользовательский элемент управления обрабатывает событие, но то же самое делает элемент управления Pivot, поэтому он переходит к следующему элементу. Я не понял, как остановить событие, когда его обрабатывает пользовательский элемент управления.

Можно ли использовать вспомогательный элемент управления с жестом пролистывания в сводном элементе управления WP7?

eg:

        private void glBlinds_Flick(object sender, FlickGestureEventArgs e)
        {
                //do stuff
                e.Handled = true;
        }

person Rodney    schedule 19.10.2010    source источник


Ответы (3)


Короткий ответ: не размещайте элемент управления, который поддерживает жест, поверх другого элемента управления, который также поддерживает тот же жест.

Пожалуйста, ознакомьтесь с этим ответом на очень похожий вопрос для получения более длинного ответа: >WP7 Тумблер в сводном элементе управления?

person Matt Lacey    schedule 19.10.2010
comment
С технической точки зрения я подумал, что весь смысл e.Handled = в том, чтобы остановить всплытие события и дальнейшее его потребление? С точки зрения пользователя - это вполне приемлемо - это все равно, что сказать, что у вас может быть только 1 событие щелчка на странице, если навигация по внешнему фрейму зависит от щелчка! Должно быть решение? - person Rodney; 19.10.2010
comment
С точки зрения удобства использования это очень сложно сделать хорошо. Также сложно объяснить пользователю, где заканчивается граница одного жеста и начинается следующий. Как правило: не делайте этого. Если вы хотите нарушить правило, помните о последствиях. Насколько я знаю, поворотный элемент управления не поддерживает способ обработки жестов смахивания, чтобы переопределить поведение по умолчанию - надеюсь/предположительно, чтобы предотвратить потенциальное нарушение поведения по умолчанию. События щелчка мышью и события сенсорного жеста нельзя сравнивать напрямую. не думайте, что это так, даже если инструменты вызывают касания кликами. - person Matt Lacey; 19.10.2010
comment
С точки зрения удобства использования я не понимаю, почему это должно быть проблемой, если пользовательский интерфейс обозначает границы с четкими границами, т.е. если вы проведете пальцем по ЭТОМУ элементу, он сделает x, а если вы проведете где-нибудь еще, он сделает Y. Пользователь технически не знает, что один элемент управления является дочерним элементом другого - элементы навигации элемента управления поворотом находятся вверху - в в старые времена они просто нажимали на заголовки вкладок, чтобы сменить страницу, иногда они позволяли им провести пальцем в любом месте страницы. Просто кажется странным, что нет никакого способа обойти это - у меня должны быть жесты смахивания, и я планировал использовать Pivot вздох - person Rodney; 19.10.2010
comment
Для меня исправление юзабилити было бы точно таким же макетом элемента управления Pivot, но смахивание работает только с заголовками. Пролистывание в любом другом месте будет работать, и пользователь никогда не узнает ничего другого. Спасибо за ответы. - person Rodney; 19.10.2010
comment
С точки зрения юзабилити вы делаете что-то другое в своем своде по сравнению с любым другим поворотом. Одним из преимуществ стандартного поведения элемента управления является то, что он всегда работает одинаково. Пользователи узнают, используя повороты в других приложениях, что они могут проводить пальцем в любом месте для навигации. [Нет, пользователь не будет знать, что это называется поворотным элементом управления, но он узнает внешний вид и поведение.] Это правило можно нарушить, просто помните о последствиях. Однако поворотный контроль не поможет вам нарушить правило. - person Matt Lacey; 19.10.2010
comment
Хм, хорошо, я думаю, что у меня есть 2 варианта: либо использовать вертикальное смахивание (что на самом деле не имеет смысла в моем приложении), либо избавиться от управления поворотом и использовать 2 разные страницы с навигацией... Я попытался перехватить событие и отменил, а радости нет. Я, вероятно, выберу вертикальный маршрут, так как управление Pivot действительно крутое. - person Rodney; 19.10.2010
comment
ps - я нашел это в Руководстве по дизайну и взаимодействию пользовательского интерфейса (хотя я все еще не уверен на 100%;) Сводные страницы не должны переопределять функции горизонтального панорамирования и пролистывания, поскольку это противоречит дизайну взаимодействия элемента управления поворотом. - person Rodney; 19.10.2010
comment
Как кто-то, кто был на семинаре WP7 на PDC10, прямо из уст лошадей ... AppHub может / будет отклонять ваше приложение, если вы встраиваете элементы управления жестами друг в друга. Я полагаю, что именно Клинт Руткас показал несколько примеров того, почему это обычно очень плохая идея (например, ползунок влево/вправо на вкладке). - person Erik Kerber; 03.11.2010
comment
Исправление выше: написал Клинт в Твиттере, и он сказал, что это просто обескураживает, а не запрещает. - person Erik Kerber; 03.11.2010

Это решение, опубликованное недавно, кажется, работает для людей, которые решают конфликты жестов на панораме / повороте. Вы могли бы проверить это.

Предотвращение прокрутки элементов управления Pivot или Panorama

person Mick N    schedule 25.11.2010
comment
Спасибо, Мик, ты уверен, что это работает с элементами управления жестами? В комментариях у другого пользователя были проблемы с этим (я не пробовал) - person Rodney; 26.11.2010
comment
решение Windows 8 UseOptimizedManipulationRouting=False - person Clinton Ward; 31.12.2014

Я обнаружил, что это хорошо работает для включения ползунка в элемент сводки:

LayoutRoot
  Pivot
    PivotItem
      Grid
        Scrollviewer
          [Content goes here, I use another grid]
        Slider

Если я пропущу сетку и размещу ползунок внутри средства просмотра прокрутки, это не сработает. Я наткнулся на это решение, так как хотел поддерживать ландшафт и по-прежнему иметь видимый/пригодный для использования ползунок.

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

person Kevin Burandt    schedule 23.10.2010