Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何右键单击列表框中的项目并在WPF上打开菜单_C#_Wpf - Fatal编程技术网

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);
}