C# 如何右键单击列表框中的项目并在WPF上打开菜单
我的列表框中有文件,我希望能够右键单击并打开类似“删除”的菜单,以便从列表框中删除文件 目前,在右键单击列表框中的项目后,我拥有此功能C# 如何右键单击列表框中的项目并在WPF上打开菜单,c#,wpf,C#,Wpf,我的列表框中有文件,我希望能够右键单击并打开类似“删除”的菜单,以便从列表框中删除文件 目前,在右键单击列表框中的项目后,我拥有此功能 private void listBoxFiles_PreviewMouseRightButtonDown(object sender, MouseButtonEventArgs e) { } 右键单击后,我实现了XAML删除菜单 <ListBox.ContextMenu> <Contex
private void listBoxFiles_PreviewMouseRightButtonDown(object sender, MouseButtonEventArgs e)
{
}
右键单击后,我实现了XAML删除菜单
<ListBox.ContextMenu>
<ContextMenu>
<MenuItem Header="Delete"/>
</ContextMenu>
</ListBox.ContextMenu>
不需要
listBoxFiles\u PreviewMouseRightButtonDown
当你写信的时候
<ListBox>
<ListBox.ContextMenu>
<ContextMenu>
<MenuItem Header="Delete"></MenuItem>
</ContextMenu>
</ListBox.ContextMenu>
</ListBox>
右键单击后,它已开始工作。您已经有了一个带有标记的上下文菜单
<ListBox.ContextMenu>
<ContextMenu>
<MenuItem Header="Delete"/>
</ContextMenu>
</ListBox.ContextMenu>
如果要执行某些操作,其中一种方法是检查在菜单的单击功能中单击了哪个项目。
例如,您有下一个列表框:
<ListBox Name="someListBox">
<ListBox.ContextMenu>
<ContextMenu>
<MenuItem Header="Delete" Click="MenuItemDelete_Click"/>
</ContextMenu>
</ListBox.ContextMenu>
<ListBoxItem>...</ListBoxItem>
<ListBoxItem>...</ListBoxItem>
<ListBoxItem>...</ListBoxItem>
</ListBox>
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>
2) 单击lisboxt项目时,它是蓝色的。右键单击列表框项目时,它仍然是蓝色的,但如果出现上下文菜单,列表框项目将变为灰色,可能是因为该项目失去了焦点
3) 删除功能工作正常:
private void MenuItemDelete_Click(object sender, RoutedEventArgs e)
{
if (someListBox.SelectedIndex == -1)
{
return;
}
someListBox.Items.RemoveAt(someListBox.SelectedIndex);
}
好的,谢谢,现在我如何“捕获”我单击的文件名(路径)?我想在菜单中添加3个功能(菜单中的每个选项都有不同的功能),因此仍然需要检查单击了哪个项目?我不理解函数的MenuItemDelete\u ClickError中的最后两行:无法将类型为“System.String”的对象强制转换为类型为“System.Windows.Controls.ListBoxItem”。现在可以了,但我还有其他问题:1。为什么列表框中的每个按下项都会将其状态从选中(蓝色)更改为未选中?如果文件已选中,并且我按下列表框上的空白区域,则文件仍处于选中状态?2.我实现的功能是,如果我右键单击列表框中的项目,然后在菜单中按Delete(删除)从列表框中删除的项目,但只有在以前未选择文件时才会发生这种情况,我的意思是,如果我在列表框中按item(项目),然后右键单击并删除列表框中重新生成且未删除的文件,请查看我的更新我想在菜单中添加3个功能,因此仍然需要检查单击了哪个项目?我不理解功能菜单中的最后两行删除\单击我想在菜单中添加3个功能(菜单中的每个选项都有不同的功能),因此仍然需要检查单击了哪个项目?我不理解函数s MenuItemDelete\u click中的最后两行,因为所有列表元素都共享一个上下文菜单,所以应该检查单击了哪个项目。最后两行不是必需的,我写它们只是为了展示一些例子。您应该确定单击了哪个元素,并对该元素执行一些操作。如果要检索单击元素的文本值,可以编写:
string elementText=((ListBoxItem)someListBox.SelectedItem)。Content.ToString()代码>错误:无法将“System.String”类型的对象强制转换为“System.Windows.Controls.ListBoxItem”类型。
private void someListBox_MouseDown(object sender, MouseButtonEventArgs e)
{
someListBox.UnselectAll();
}
private void MenuItemDelete_Click(object sender, RoutedEventArgs e)
{
if (someListBox.SelectedIndex == -1)
{
return;
}
someListBox.Items.RemoveAt(someListBox.SelectedIndex);
}