是否有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?
最诚挚的问候,
马克
答案 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));
这适用于对可视列表元素进行操作=)