LongListSelector:项目点击?

我正在Windows Phone 8上使用LongListSelector控件,无法找出最好的方法来处理一个项目的水龙头。 我发现的几个例子依赖于SelectionChanged事件。 但是,这个解决方法是错误的,因为如果我点击打开一个新页面的项目,回来,然后再次点击相同的项目,它不会工作,因为这个项目已被选中,所以SelectionChanged不会被触发。

我尝试注册到轻击事件,并使用当前select的项目作为轻敲的项目,但有时候当前select的项目不是我所期望的。

我可以把我的ItemTemplate包装在一个button中,并处理每个项目的水龙头,但我需要reskinbutton,使它看起来像一个简单的列表项。

最后,我不明白为什么要实现这样一个基本的事情是如此复杂。 有没有一个简单而标准的方式,我错过了?

我的第二个愿望是当它被挖掘时对物品产生影响。 有没有什么标准的方法来做到这一点?

您可以在每个SelectionChanged事件结束时将您的LongListSelector的SelectedItemnull 。 即

 <phone:LongListSelector x:Name="LLS" SelectionChanged="LLS_SelectionChanged"> 

而事件处理程序:

 private void LLS_SelectionChanged(object sender, SelectionChangedEventArgs e) { // If selected item is null, do nothing if (LLS.SelectedItem == null) return; // Navigate to the next page NavigationService.Navigate(new Uri("/nextpage.xaml", UriKind.Relative)); // Reset selected item to null LLS.SelectedItem = null; } 

你会两次触发SelectionChanged事件,但是第二次没有事情发生,你应该得到你正在寻找的行为 – (即设置SelectedItemnull将触发一个新的SelectionChanged事件,但是第二个事件被捕获在if语句中)

至于你的问题的第二部分,你可能会更好地发布一个新的问题。

我用Tap事件处理完成了。

我不喜欢使用Selected属性,但是通过这种方式获取tapped项(我没有注意到任何bug):

 MyListItemClass item = ((FrameworkElement)e.OriginalSource).DataContext as MyListItemClass; 

此外,您可以通过从e.OriginalSource通过VisualTree进行导航,使原始项目ContentPresenter变得简单。 那样:

 ContentPresenter itemPresenter = SomeHelperClass .FindParent<ContentPresenter>(e.OriginalSource,""); 

FindParent类似于在这个问题中find孩子: 我怎样才能find名称或types的WPF控件?

ContentPresenter是您需要手动更改项目模板的对象(如果需要设置“已select”状态)。

  private void Item_tap(object sender, RoutedEventArgs e) { var element = (FrameworkElement)sender; DataSource data = (DataSource)element.DataContext; } 

我的第二个愿望是当它被挖掘时对物品产生影响。 有没有什么标准的方法来做到这一点?

为此,您需要做的唯一事情就是将其添加到您的控件(或者您希望具有此效果的堆叠面板)中:

 <StackPanel toolkit:TiltEffect.IsTiltEnabled="True"> 

首先把这个添加到* .xaml页面里面

 LongListSelectorSelectionChanged="listBox_SelectionChanged" 

所以它看起来像这样:

 <toolkit:LongListSelector x:Name="listBox" SelectionChanged="listBox_SelectionChanged"> 

然后在事件处理程序的* .xaml.cs文件中

 private void listBox_SelectionChanged(object sender, SelectionChangedEventArgs e) { // Write your logic on what you want to do with the selected item } 

除了halil's答案:

首先你需要通过NuGet安装Windows Phone Toolkit(WPtoolkit)。 在PhoneApplicationPage上添加名称空间声明。

 xmlns:toolkit="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone.Controls.Toolkit" 

在此之后,您可以添加toolkit:TiltEffect.IsTiltEnabled="True"到控件定义。

这是很好的诺基亚logging: http : //developer.nokia.com/community/wiki/Tilt_Effect_for_Windows_Phone

奥利弗