2012-01-17 68 views
0

在我的Windows Phone 7應用程序中,我有以下代碼來處理ListBox的OnSelectedIndexChange。ListBox和selectedIndexChanged事件後,用戶點擊後退按鈕

private void wordList_SelectionChanged(object sender, SelectionChangedEventArgs e) 
     { 
      WordList selectedList = (WordList)e.AddedItems[0]; 
      NavigationService.Navigate(new Uri("/Views/Game.xaml?ListName=" + selectedList.Name, UriKind.RelativeOrAbsolute)); 
     } 

上面的代碼工作正常,但是,如果對硬件後退按鈕從遊戲頁面的用戶點擊,並點擊列表框一樣物品,上面的代碼沒有被調用。我認爲這是因爲選定的項目是相同的,因此SelectionChanged事件沒有被調用。

我該如何做到這一點,如果用戶選擇相同的項目,我仍然可以將它們發送到遊戲頁面?

我看了一下Tap Event,但是我找不到從Tab鍵事件中獲取選定項目的方法。

回答

1

這樣,您可以從Tap事件中獲取所選項目。

private void wordList_Tap(object sender, GestureEventArgs e) 
{ 
    var selectedElement = e.OriginalSource as FrameworkElement; 
    if (selectedElement != null) 
    { 
     var selectedData = selectedElement.DataContext as WordList; 
     if (selectedData != null) 
     { 
      NavigationService.Navigate(new Uri("/Views/Game.xaml?ListName=" + selectedData.Name, UriKind.RelativeOrAbsolute)); 
     } 
    } 
} 
+0

謝謝你這樣做。 – atbebtg 2012-01-18 03:30:18

2

使用SelectionChanged進行導航時,請使用檢查來環繞導航邏輯,以查看SelectedIndex = -1。在導航之後,將索引設置爲-1,以便該事件不會觸發兩次。

private void wordList_SelectionChanged(object sender, SelectionChangedEventArgs e) 
      { 
       var lb = sender as ListBox; 
       if (lb != null) 
        { 
         if (lb.SelectedIndex == -1) return; 

       WordList selectedList = (WordList)e.AddedItems[0]; 
       NavigationService.Navigate(new Uri("/Views/Game.xaml?ListName=" + selectedList.Name, UriKind.RelativeOrAbsolute)); 
        lb.SelectedIndex = -1; 
       } 
      } 
0

我在UserControl中有這樣的問題。檢查發件人,並返回,如果它不是觸發事件的ListBox控件:

protected void cbEvents_SelectedIndexChanged(object sender, EventArgs e) 
    { 
    if (sender is DropDownList) 
     RebindGrid(); 
    } 
相關問題