首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LongListSelector:项目点击?

LongListSelector:项目点击?
EN

Stack Overflow用户
提问于 2013-01-08 20:43:45
回答 6查看 16.1K关注 0票数 36

我正在使用Windows phone8上的LongListSelector控件,但找不到处理点击项目的最佳方法。我找到的少数几个示例依赖于SelectionChanged事件。然而,这个解决方案是错误的,因为如果我点击一个打开新页面的项目,点击back,然后再次点击相同的项目,它将不会工作,因为这个项目已经被选中,所以SelectionChanged不会被触发。

我试图注册到点击事件,并使用当前选择的项目作为点击的项目,但有时当前选择的项目不是我期望的项目。

我可以将我的ItemTemplate包装在一个按钮中,并处理每个项目的点击,但我需要重新设置按钮的皮肤,使其看起来像一个简单的列表项。

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

我的第二个愿望是在项目被点击时获得效果。有没有什么标准的方法呢?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2013-01-09 18:30:45

您可以在每个SelectionChanged事件的末尾null您的LongListSelector的SelectedItem。也就是说。

代码语言:javascript
复制
<phone:LongListSelector x:Name="LLS" SelectionChanged="LLS_SelectionChanged">

和事件处理程序:

代码语言:javascript
复制
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-语句中)

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

票数 41
EN

Stack Overflow用户

发布于 2013-01-14 06:21:42

我使用点击事件处理完成了这项工作。

我不喜欢使用选定的属性,而是以这种方式点击项(我没有注意到任何bug):

代码语言:javascript
复制
MyListItemClass item = ((FrameworkElement)e.OriginalSource).DataContext 
                                                             as MyListItemClass;

此外,您还可以通过从e.OriginalSource向上导航VisualTree来简单地获取原始项目ContentPresenter。这样的话:

代码语言:javascript
复制
ContentPresenter itemPresenter = SomeHelperClass
                              .FindParent<ContentPresenter>(e.OriginalSource,"");

在此问题中,FindParent与查找子级相似:How can I find WPF controls by name or type?

如果您想要手动更改项模板(例如设置"selected“状态),ContentPresenter就是您手动更改项模板所需对象。

票数 9
EN

Stack Overflow用户

发布于 2013-11-13 18:50:46

代码语言:javascript
复制
 private void Item_tap(object sender, RoutedEventArgs e)
        {
            var element = (FrameworkElement)sender;
            DataSource data = (DataSource)element.DataContext;


        }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14215227

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档