后,您已经有您的标记上下文菜单。
如果您想执行一些操作,其中一种方法是检查菜单的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;
// Hypothetical function GetElement retrieves some element
var element = GetElement(someListBox.SelectedIndex);
// Hypothetical function DeleteElement
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)此功能将unsellect的所有项目,当你点击列表框中的空白:
private void someListBox_MouseDown(object sender, MouseButtonEventArgs e)
{
someListBox.UnselectAll();
}
2)当你点击lisboxt项目,它是蓝色的。当您右键单击列表框项目时,它仍然是蓝色的,但如果出现上下文菜单,则列表框项目变为灰色,可能是因为此项目失去焦点。
3)删除功能工作正常:
private void MenuItemDelete_Click(object sender, RoutedEventArgs e)
{
if (someListBox.SelectedIndex == -1)
{
return;
}
someListBox.Items.RemoveAt(someListBox.SelectedIndex);
}
谢谢,我会在晚上和更新尝试。 – user979033 2012-03-04 10:27:57
好的,谢谢,现在我该如何“捕捉”我点击的文件名(路径)? – user979033 2012-03-04 21:11:47
我想在菜单中添加3个功能(菜单中的每个选项都有不同的功能),所以仍然需要检查哪个项目被点击了?并且我不明白函数中的最后2行MenuItemDelete_Click – user979033 2012-03-04 21:42:45