LongListSelector:项目点击?
我正在Windows Phone 8上使用LongListSelector控件,无法找出最好的方法来处理一个项目的水龙头。 我发现的几个例子依赖于SelectionChanged事件。 但是,这个解决方法是错误的,因为如果我点击打开一个新页面的项目,回来,然后再次点击相同的项目,它不会工作,因为这个项目已被选中,所以SelectionChanged不会被触发。
我尝试注册到轻击事件,并使用当前select的项目作为轻敲的项目,但有时候当前select的项目不是我所期望的。
我可以把我的ItemTemplate包装在一个button中,并处理每个项目的水龙头,但我需要reskinbutton,使它看起来像一个简单的列表项。
最后,我不明白为什么要实现这样一个基本的事情是如此复杂。 有没有一个简单而标准的方式,我错过了?
我的第二个愿望是当它被挖掘时对物品产生影响。 有没有什么标准的方法来做到这一点?
您可以在每个SelectionChanged
事件结束时将您的LongListSelector的SelectedItem
为null
。 即
<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事件,但是第二次没有事情发生,你应该得到你正在寻找的行为 – (即设置SelectedItem
为null
将触发一个新的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
奥利弗