2013-10-08 2 views
0

Загрузите некоторые вопросы викторины в один из моих PivotItems.WP8 - Показать MessageBox перед выходом из Pivotitem

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

Как я могу управлять этим?

P.S. Я знаю, что Викторина должна быть на другой странице, но я хочу достичь этого с помощью pivotItems.

+0

Привет вы знаете количество элементов шарнирных точно? будет динамически изменяться или быть константой? – Noorul

+0

А как насчет кнопок пуска/остановки + yourPivot.IsLocked = true/false? –

ответ

0

Немного грязным способом было бы сохранить выбранное в настоящее время состояние Pivot Index и подписаться на DragStartedGestureEventArgs, используя набор инструментов для управления телефоном Windows.

<controls:Pivot x:Name="pivotControl" Title="MY APPLICATION"> 
     <toolkit:GestureService.GestureListener> 
      <toolkit:GestureListener DragStarted="SelectedPivotChanging"></toolkit:GestureListener> 
     </toolkit:GestureService.GestureListener> 
     <controls:PivotItem Header="item1"> 
      <Grid /> 
     </controls:PivotItem> 
     <controls:PivotItem Header="item2"> 
      <Grid/> 
     </controls:PivotItem> 
    </controls:Pivot> 

private void SelectedPivotChanging(object sender, DragStartedGestureEventArgs e) 
    { 
     if (pivotControl.SelectedIndex == 0) 
     { 
      if (MessageBox.Show("Are you sure you wish to navigate away?", "Un-Answered questions", MessageBoxButton.OKCancel) 
       == MessageBoxResult.Cancel) 
      { 
       //pivotControl.SelectedIndex = previousIndex; 
      } 
     } 
    } 
+0

Я пробовал это, и он имеет такое же поведение, как и событие LostFocus, зарегистрированное для указанного pivotItem. Хотя он запускает событие, на заднем плане стержень уже изменен и не может вернуться к той же оси, если нажата кнопка MessageBoxResult.OK. –

1

Вы можете подписаться на событие SelectionChanged всякий раз, когда изменяется PivotItem. Проверьте ссылки на некоторые примеры из MSDN.

http://msdn.microsoft.com/en-us/library/windowsphone/develop/microsoft.phone.controls.pivot.selectionchanged(v=vs.105).aspx

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

+0

Все те же. Всплывающее окно появляется, но PivotItem уже изменен, и в фоновом режиме он загружает содержимое из следующего PivotItem, хотя появляется всплывающее окно MessageBox. Я хочу остаться в текущем PivotItem, чтобы не меняться до выбора пользователя. –

+0

Должен быть способ переопределить событие салфетки. Если вы можете обнаружить, что, то вы будете в состоянии остановить загрузку следующего шарнира. Я знаю, что некоторые другие комментаторы сказали попробовать подобное исправление. Но если вы нашли решение, было бы интересно посмотреть, как вы обошли это. – WiteCastle

2

Подписаться на шарниры SelectionChanged события

Pivot_SelectionChanged Event 
{ 
if(Pivot.selectedindex==1|| 3|| 4) 
{ 
Messagebox(); 
} 
} 

Если предположить, что 2 Ваш индекс шарнирные элементы.

теперь, если пользователь выбирает «да», а затем назначить поворачивается SelectedIndex 2

Смежные вопросы