你已经有了一个带有你的标记的上下文菜单。
如果你想执行某个操作,其中一种方法是在菜单的Click函数中检查点击了哪个项目。例如,你有以下的列表框:
<ListBox Name="someListBox">
<ListBox.ContextMenu>
<ContextMenu>
<MenuItem Header="Delete" Click="MenuItemDelete_Click"/>
</ContextMenu>
</ListBox.ContextMenu>
<ListBoxItem>...</ListBoxItem>
<ListBoxItem>...</ListBoxItem>
<ListBoxItem>...</ListBoxItem>
</ListBox>
下一个可能的函数是:
private void MenuItemDelete_Click(object sender, RoutedEventArgs e)
{
if (someListBox.SelectedIndex == -1) return;
var element = GetElement(someListBox.SelectedIndex);
DeleteElement(element);
}
更新于2012年3月5日:
这里是另一种列表框的变体。你可以向列表框项添加上下文菜单,而不是仅限于列表框本身。例如:
<ListBox Name="someListBox" MouseDown="someListBox_MouseDown">
<ListBox.Resources>
<!--Defines a context menu-->
<ContextMenu x:Key="MyElementMenu">
<MenuItem Header="Delete" Click="MenuItemDelete_Click"/>
</ContextMenu>
<!--Sets a context menu for each ListBoxItem in the current ListBox-->
<Style TargetType="{x:Type ListBoxItem}">
<Setter Property="ContextMenu" Value="{StaticResource MyElementMenu}"/>
</Style>
</ListBox.Resources>
<ListBoxItem>...</ListBoxItem>
<ListBoxItem>...</ListBoxItem>
<ListBoxItem>...</ListBoxItem>
</ListBox>
1) 当您在列表框的空白区域中单击时,此函数将取消选择所有项目:
private void someListBox_MouseDown(object sender, MouseButtonEventArgs e)
{
someListBox.UnselectAll();
}
2) 当您单击列表框项时,它会变为蓝色。当您右键单击列表框项时,它仍然是蓝色的,但如果出现上下文菜单,则列表框项会变为灰色,可能是因为此项失去了焦点。
3) 删除功能正常工作:
private void MenuItemDelete_Click(object sender, RoutedEventArgs e)
{
if (someListBox.SelectedIndex == -1)
{
return;
}
someListBox.Items.RemoveAt(someListBox.SelectedIndex);
}
string elementText = ((ListBoxItem)someListBox.SelectedItem).Content.ToString();
- Taras Feschuk