LongListSelector:项目点击
本文关键字:项目 LongListSelector | 更新日期: 2023-09-27 17:50:56
我在Windows Phone 8上使用LongListSelector控件,无法找出处理点击项目的最佳方法。我发现的几个例子依赖于SelectionChanged事件。然而,这个解决方案是有bug的,因为如果我点击打开一个新页面的项目,点击返回,然后再次点击相同的项目,它将不起作用,因为该项目已经被选中,所以SelectionChanged不会被触发。
我尝试注册到点击事件并使用当前选择的项目作为点击的项目,但有时当前选择的项目不是我所期望的。
我可以将我的ItemTemplate包装在一个按钮中,并处理每个项目的点击,但我需要重新设计按钮,使其看起来像一个简单的列表项目。
最后,我不明白为什么实现这样一个基本的事情是如此复杂。有没有我漏掉的简单标准的方法?
我的第二个愿望是当物品被点击时对它产生效果。有什么标准的做法吗?
您可以在每个SelectionChanged
事件结束时null
您的LongListSelector的SelectedItem
。例如
<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事件处理完成了。
我不喜欢使用选择属性,而是用这种方式点击项目(我没有注意到任何错误):
MyListItemClass item = ((FrameworkElement)e.OriginalSource).DataContext
as MyListItemClass;
同样,你可以通过导航到VisualTree从e.o originalsource获得原始项目ContentPresenter简单。这种方式:
ContentPresenter itemPresenter = SomeHelperClass
.FindParent<ContentPresenter>(e.OriginalSource,"");
在这个问题中FindParent类似于find child:我如何通过名称或类型找到WPF控件?
ContentPresenter就是你需要手动改变项目模板的对象(比如设置"selected"状态)。
private void Item_tap(object sender, RoutedEventArgs e)
{
var element = (FrameworkElement)sender;
DataSource data = (DataSource)element.DataContext;
}
我的第二个愿望是当物品被点击时对它产生效果。是有什么标准的做法吗?
对于这个,你唯一需要做的就是把它添加到你的控件(或者你想要这个效果的stackpanel):
<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
}
除了哈利的回答:
首先,您需要通过NuGet安装Windows Phone Toolkit (WPtoolkit)。然后在PhoneApplicationPage上添加命名空间声明。
xmlns:toolkit="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone.Controls.Toolkit"
之后,您可以将toolkit:TiltEffect.IsTiltEnabled="True"
添加到控件定义中。
诺基亚很好地记录了:http://developer.nokia.com/community/wiki/Tilt_Effect_for_Windows_Phone
奥利弗