[英]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.