2012-01-17 70 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(); 
    }