簡體   English   中英

需要產生上下文菜單的ListBoxItem

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM