有类似的问题,但正如我将解释的那样,他们的答案对我来说似乎不起作用。
我有一个Listbox,其中ItemsSource为其提供数据......
<ListBox Name="lbPatternResults" SelectionMode="Multiple">
<ListBox.ContextMenu>
<ContextMenu>
<MenuItem Header="Get current values" Click="GetCurrentValuesForID"/>
</ContextMenu>
</ListBox.ContextMenu>
</ListBox>
ItemsSource属性设置在IEnumerable的其他位置。
点击menuitem时,发件人为MenuItem
,其父级为ContextMenu
。通常,为了获得ListBoxItem
,人们被告知使用上下文菜单PlacementTarget
,但在我的情况下,它不是ListBoxItem
...它是ListBox
。我怎么从这里开始?我只想要列表中的索引或行的值...
编辑:它不是ListBox的SelectedIndex(可以有一个选定的索引,另一个可以从中获取菜单)。
答案 0 :(得分:1)
这对我来说很好用:
<ListBox>
<ListBox.Resources>
<ContextMenu x:Key="MyContextmenu">
<MenuItem Click="MenuItem_OnClick"
Header="Test" />
</ContextMenu>
</ListBox.Resources>
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="ContextMenu"
Value="{DynamicResource MyContextmenu}" />
</Style>
</ListBox.ItemContainerStyle>
<ListBoxItem Content="A" />
<ListBoxItem Content="B" />
<ListBoxItem Content="C" />
<ListBoxItem Content="D" />
<ListBoxItem Content="E" />
</ListBox>
和代码隐藏:
private void MenuItem_OnClick(object sender, RoutedEventArgs e) {
var menuItem = (sender as MenuItem);
if (menuItem == null)
return;
var parentMenu = menuItem.Parent as ContextMenu;
if (parentMenu == null)
return;
var lbItem = parentMenu.PlacementTarget as ListBoxItem;
if (lbItem != null)
MessageBox.Show((string)lbItem.Content);
}