繁体   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