需要生成上下文菜单的ListBoxItem
本文关键字:菜单 ListBoxItem 上下文 | 更新日期: 2023-09-27 18:17:19
也有类似的问题,但正如我将解释的那样,他们的答案似乎对我不起作用。
我有一个Listbox与ItemsSource提供它的数据…
<ListBox Name="lbPatternResults" SelectionMode="Multiple">
<ListBox.ContextMenu>
<ContextMenu>
<MenuItem Header="Get current values" Click="GetCurrentValuesForID"/>
</ContextMenu>
</ListBox.ContextMenu>
</ListBox>
ItemsSource属性在别处被设置为IEnumerable。
单击菜单项时,发送方为MenuItem
,父方为ContextMenu
。通常,要获得ListBoxItem
,人们被告知使用上下文菜单的PlacementTarget
,但在我的情况下,它不是ListBoxItem
…是ListBox
。我从这里怎么走?我只想要索引或列表中行值…
编辑:它不是ListBox的SelectedIndex(可以有一个选定的索引,另一个您从中获得菜单)。
这对我来说很好:
<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);
}