gpt4 book ai didi

windows-phone-7 - 如何在 Listbox 中实现 Hold?

转载 作者:行者123 更新时间:2023-12-04 07:04:02 26 4
gpt4 key购买 nike

如果持有列表框,我想获取列表框索引。

这是我的代码:

<ListBox Margin="0,0,-12,0" 
Hold="holdlistbox"
x:Name="listbox"
SelectionChanged="listbox_SelectionChanged"
SelectedIndex="-1">
</ListBox>



private void holdlistbox(object sender, System.Windows.Input.GestureEventArgs e)
{
//How to get ListBox index here
}

如果有人知道帮助我做到这一点。

最佳答案

e.OriginalSource 将为您提供所持有的实际控件(您手指正下方的最顶层控件)。根据您的 ItemTemplate 和您持有的位置,这可能是项目中的任何控件。然后,您可以检查此控件的 DataContext 以获取绑定(bind)到该项目的对象(根据您的注释,这将是一个 ItemViewModel 对象):

FrameworkElement element = (FrameworkElement)e.OriginalSource;
ItemViewModel item = (ItemViewModel)element.DataContext;

然后,您可以在 items 集合中获取该项目的索引:
int index = _items.IndexOf(item);

如果要获取 ListBoxItem 本身,则需要使用 VisualHelper 类来搜索父层次结构。这是我用来执行此操作的扩展方法:
public static T FindVisualParent<T>(this DependencyObject obj) where T : DependencyObject
{
DependencyObject parent = VisualTreeHelper.GetParent(obj);
while (parent != null)
{
T t = parent as T;
if (t != null)
{
return t;
}
parent = VisualTreeHelper.GetParent(parent);
}
return null;
}

我不确定您是否需要这个(我无法从您的评论中确定),但您可以执行以下操作来获取上下文菜单:
FrameworkElement element = (FrameworkElement)e.OriginalSource;
ListBoxItem listItem = element.FindVisualParent<ListBoxItem>();
ContextMenu contextMenu = ContextMenuService.GetContextMenu(listItem);

这假定 ContextMenu 已附加到 ListBoxItem,如果没有,则需要在父层次结构中搜索不同的控件。

关于windows-phone-7 - 如何在 Listbox 中实现 Hold?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8269244/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com