在WP8中使用LongListSelector替代ItemContainerGenerator?

时间:2013-11-10 22:57:26

标签: windows-phone-8 longlistselector itemcontainergenerator

使用分组LongListSelector时,

是否有ItemContainerGenerator的替代?

我在每个ListBoxItem上都有一个上下文菜单。一个选项是“删除项目”。这适用于以下代码(不是很整洁,但它有效;更好的实现方法?):

 private void deleteItem(object sender, RoutedEventArgs e)
    {
        ViewModel drink = (sender as FrameworkElement).DataContext as ViewModel;
        for (int i = 0; i < LLSGroups.Count; i++)
           {
              if (LLSGroups[i].Remove(drink))
              break;
           }
    }

我想在删除时为项目设置动画。因此,我需要该ListBoxItem的FrameworkElement。使用通常的ListBox,它可以与

一起使用
  FrameworkElement element = (MyList.ItemContainerGenerator.ContainerFromItem(((MenuItem)sender).DataContext) as ListBoxItem) as FrameworkElement; 

问题:LongListSelectors没有实现ItemContainerGenerator。如何获取动画的FrameworkElement?

最诚挚的问候,

马克

1 个答案:

答案 0 :(得分:1)

我使用VisualTreeHelper构建一个变通方法:输入包含应该搜索的元素和我想要查找的元素。

 private FrameworkElement SearchVisualTree(DependencyObject targetElement, DependencyObject comp)
    {
        FrameworkElement res = null;
        var count = VisualTreeHelper.GetChildrenCount(targetElement);
        if (count == 0)
            return res;

        for (int i = 0; i < count; i++)
        {
            var child = VisualTreeHelper.GetChild(targetElement, i);
            if ((child as FrameworkElement).DataContext == (comp as FrameworkElement).DataContext)
            {
                res = child as FrameworkElement;
                return res;
            }
            else
            {
                res = SearchVisualTree(child, comp);
                if (res != null)
                    return res;
            }
        }
        return res;
    }

电话看起来像这样:

FrameworkElement element = SearchVisualTree(myList, (sender as FrameworkElement));

这适用于对可视列表元素进行操作=)