我在Windows Phone 8上使用LongListSelector控件,无法找出处理项目点击的最佳方法。 我发现的几个例子都依赖于SelectionChanged事件。但是,这个解决方案有问题,因为如果我点击打开新页面的项目,回击,然后再次点击同一项目,它将无法工作,因为此项目已被选中,因此不会触发SelectionChanged。
我尝试注册点击事件并使用当前所选项目作为点击事件,但有时候当前所选项目不是我期望的项目。
我可以将我的ItemTemplate包装在一个按钮中并处理每个项目的点击,但我需要重新设置按钮以使其看起来像一个简单的列表项。
最后,我不明白为什么实现这样一个基本的东西是如此复杂。我错过了一种简单而标准的方式吗?
我的第二个愿望是在点击项目时对项目产生影响。有没有标准的方法呢?
答案 0 :(得分:41)
您可以在每个null
事件结束时SelectedItem
您的LongListSelector的SelectionChanged
。即。
<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语句捕获了
关于问题的第二部分,您可能最好发布一个新问题。
答案 1 :(得分:9)
我是通过点击事件处理完成的。
我不想使用Selected属性,但是以这种方式获取tapped项目(我没有注意到任何错误):
MyListItemClass item = ((FrameworkElement)e.OriginalSource).DataContext
as MyListItemClass;
此外,您可以通过从e.OriginalSource浏览VisualTree来获取原始项目ContentPresenter。那样:
ContentPresenter itemPresenter = SomeHelperClass
.FindParent<ContentPresenter>(e.OriginalSource,"");
FindParent类似于在这个问题中找到孩子:How can I find WPF controls by name or type?
ContentPresenter是您想要手动更改项目模板所需的对象(例如,设置“选定”状态)。
答案 2 :(得分:1)
private void Item_tap(object sender, RoutedEventArgs e)
{
var element = (FrameworkElement)sender;
DataSource data = (DataSource)element.DataContext;
}
答案 3 :(得分:0)
我的第二个愿望是在点击项目时对项目产生影响。是 有没有标准的方法呢?
为此,您需要做的唯一事情是将此添加到您的控件(或您希望产生此效果的stackpanel):
<StackPanel toolkit:TiltEffect.IsTiltEnabled="True">
答案 4 :(得分:0)
首先将其添加到
中的* .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
}
答案 5 :(得分:0)
除了哈利的回答:
首先,您需要安装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
奥利弗