Почему UWP Flipview не переключается на второй элемент?

У меня есть элемент управления для управления FlipView (flipView), и я хочу синхронизировать SelectedIndex с ListBox (subMenuList) для навигации между моим содержимым. И поскольку у владельцев продуктов есть замечательные требования, у меня есть еще один ListBox (shortcutList) в элементе управления для первого элемента FlipView, который также привязан к SelectedIndex FlipView.

Внимание! Некоторые элементы списков свернуты для имитации быстрого доступа к содержимому Flipview.

Эти элементы управления идеально синхронизированы друг с другом, но второй элемент FlipView:

  • Использование мыши: при первом щелчке я могу перейти на страницу 1, а когда я перелистываю обратно на shortcutList, я не могу перейти на страницу 1, но могу перейти куда угодно. А потом, когда я снова перелистываю на shortcutList, я снова могу перейти на страницу 1 и так далее!
  • Сенсорный экран: я могу сколько угодно нажимать и переходить на первую страницу, я никогда не попаду на свою первую страницу, но я могу перейти куда угодно.

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

Надеюсь, кто-нибудь объяснит мне, почему UWP Flipview не переключается на второй элемент? И спасибо за попытку помочь мне найти проблему.


person Agent Smith    schedule 01.07.2017    source источник


Ответы (2)


Проблема в том, что элемент уже находится в выбранном состоянии, поэтому вы не можете выбрать его снова - по крайней мере, его выбор ничего не делает, поскольку нет события изменения выбора, и, следовательно, привязка SelectedIndex не распространяет никаких изменений. Чтобы доказать это - то же самое произойдет, если вы перейдете на страницу 4, вернетесь на первую страницу и снова щелкните страницу 4.

Как это решить? Я думаю, вам придется использовать код. Хотя это решение XAML почти работает, оно довольно хрупкое. Самым простым решением было бы заменить ListBox в FlipContent0Control тремя простыми кнопками и в их обработчиках Click перейти на соответствующую страницу. Для еще лучшего подхода вы должны попытаться изменить приложение, чтобы использовать шаблон проектирования MVVM.

person Martin Zikmund    schedule 02.07.2017

Я также совершил грязное исправление на Github, используя указания Мартин Зикмунд

Как это решить? Я думаю, вам придется использовать код. Хотя это решение XAML почти работает, оно довольно хрупкое. Самым простым решением было бы заменить ListBox в FlipContent0Control тремя простыми кнопками и в их обработчиках Click перейти на соответствующую страницу.

и совет от Jawahar

это потому, что ваш палец все еще касается элемента управления, поэтому флипвью не может анимировать. Так что я дал небольшой перерыв после перед навигацией. К тому моменту пользователь отпустил бы палец и все заработало!!!

в следующем сообщении.
Итак, три шага к решению:

  1. Замените SelectedIndex в FlipContent0Control событием Tapped на каждом ListBoxItem внутреннем холсте.
  2. Обеспечьте событие при касании, чтобы поднять целевой индекс для выбора в FlipView.
  3. Добавьте Task.Delay(100) в обработчик метода события TargetedIndexChanged
person Agent Smith    schedule 06.07.2017