[英]Need the ListBoxItem that spawned the Context Menu
有类似的问题,但是正如我将要解释的那样,他们的答案似乎对我不起作用。
我有一个带有提供数据的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(可以有一个选定的索引,而您可以从菜单中获得另一个)。
这对我来说很好:
<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);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.