Windows phone 7 ListBox.SelectedIndex在ContextMenu事件处理程序中

Windows phone 7 ListBox.SelectedIndex在ContextMenu事件处理程序中,windows-phone-7,listbox,contextmenu,Windows Phone 7,Listbox,Contextmenu,我有一个带有上下文菜单的列表框。如何在ContextMenuItem click事件处理程序中获取SelectedIndex(SelectedItem)属性的值?当前在事件中,编辑\单击并删除\单击CarsList.SelectedIndex的值始终为-1 这里是我的XAML列表框: 谢谢。首先,您已将上下文菜单指定给列表框控件,而不是每个项目。因此,将块移到堆栈面板 有几种方法可以获取元素,在该元素上执行关联菜单单击: 在中单击处理程序,您拥有发送者对象(我猜它是菜单项) 将其转换为Men

我有一个带有上下文菜单的列表框。如何在ContextMenuItem click事件处理程序中获取SelectedIndex(SelectedItem)属性的值?当前在事件中,编辑\单击并删除\单击CarsList.SelectedIndex的值始终为-1

这里是我的XAML列表框:



谢谢。

首先,您已将
上下文菜单
指定给
列表框
控件,而不是每个项目。因此,将
块移到
堆栈面板

有几种方法可以获取元素,在该元素上执行关联菜单单击:

中单击
处理程序,您拥有
发送者
对象(我猜它是
菜单项

将其转换为
MenuItem
并查看其
DataContext
。它将是绑定到列表的集合项。因此,您可以通过以下方式查找索引:

int selectedIndex = YourListBoxItemCollection.IndexOf((sender as MenuItem).DataContext)

,其中,
YourListBoxItemCollection
是您分配给
CarsList的内容。ItemsSource
看起来您需要使用ListPicker(http://silverlight.codeplex.com/releases/view/75888)用SelectedItems。 或
添加元素选择的一些标志…

例如,我将ContextMenu块移动到StackPanel并分配给ListBox.ItemsSource值“Cars”。但是我在code>int-selectedIndex=Cars.IndexOf((发送方作为UIElement.DataContext)中有一个错误//找不到System.Windows.UIElement的DataContext定义有什么问题吗?抱歉,
DataContext
位于
FrameworkElement
中。试试看,或者用
MenuItem
代替
UIElement
。它应该将workListBoxItem contextMenuListItem=CarsList.ItemContainerGenerator.ContainerFromItem((发送者作为ContextMenu.DataContext)作为ListBoxItem//找到此代码,但它引发异常NullReferenceException。我不明白如何读取ItemTemplate中文本框的值?请一步一步地调试代码<代码>变量菜单=发送者作为上下文菜单
Car Car=Menu.DataContext作为Car
int index=Cars.IndexOf(Car)哪里有异常?感谢您的帮助和提示:)它正在工作(解决方案如下,在第二个答案下)。已解决。使用此常见问题解答:对于将来的问题:>ListBoxItem selectedListBoxItem=CarsList.ItemContainerGenerator.ContainerFromItem((发件人作为MenuItem.DataContext)作为ListBoxItem;int SelectedIndex=CarsList.ItemContainerGenerator.IndexFromContainer(selectedListBoxItem);这是一项工作,但很有趣的是,是否有针对该代码的优化或更灵活的解决方案?谢谢大家的回答。
int selectedIndex = YourListBoxItemCollection.IndexOf((sender as MenuItem).DataContext)