Отключить ввод в Pivot во время перехода? - PullRequest
1 голос
/ 15 ноября 2011

У меня возникла проблема с Pivot Control на Windows Phone 7. В разрабатываемом приложении, помимо возможности использования стандартного пролистывания влево и вправо для изменения сводной страницы, элемент управления Pivot также автоматически перемещается, когда кнопки нажимаются путем установки SelectedIndex.

При переходе по экрану нажатие кнопки регистрируется. Пока анимация не установится, нажатие этой кнопки предназначено не для той кнопки. (То есть, если SelectedItem увеличивается, нажатие на правой стороне экрана приведет к выбору кнопки на левой стороне)

Внедряемое приложение представляет собой приложение для викторины. Переписать, чтобы заменить элемент управления pivot, на данном этапе не реально, поскольку приложение почти завершено, за исключением этой проблемы, а Pivot предоставляет все остальные необходимые функциональные возможности.

Итак, есть ли способ остановить ввод данных во время анимации?

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

Кто-нибудь получил какие-либо другие предложения для решений?

Ответы [ 3 ]

3 голосов
/ 15 ноября 2011

Измените свойство IsHitTestVisible стержня во время изменения элемента сводки, чтобы предотвратить такие касания.

Установите его на false, когда пивот равен UnloadingPivotItem, а затем включите его для события LoadedPivotitem.

1 голос
/ 15 ноября 2011

После короткого теста выясняется, что событие Pivot.LoadedPivotItem возникает после завершения анимации. Это означает, что вы можете использовать логическое поле для подавления обработчика события кнопки во время анимации.

Когда вы устанавливаете выбранный индекс:

_suppressEvents = true;
uxPivot.SelectedIndex = index;

Затем в событии LoadedPivotItem:

_suppressEvents = false;

И в событиях кнопки:

private void button_Click(object sender, RoutedEventArgs e)
{
    if (!_suppressEvents)
    {
        ...
    }
}
0 голосов
/ 19 июня 2013

Немного добавив к исходному ответу .. вы также можете заблокировать каждый круг, просто установив isLocked = true

и для кнопок

//unlock
SettingsPivot.IsLocked = false;
//navigate
SettingsPivot.SelectedItem = OtherSettings;
//lock new pivot
SettingsPivot.IsLocked = true;
...