2012-03-03 23 views
10

我有列表框中的文件,我希望能够右键单击并打开菜单如删除以从列表框中删除文件。如何右键单击列表框中的项目并打开WPF上的菜单

目前,我有这个功能后,右键单击项目我的列表框

private void listBoxFiles_PreviewMouseRightButtonDown(object sender, MouseButtonEventArgs e) 
{ 

} 

内,我实现了在XAML删除右键菜单中单击

  <ListBox.ContextMenu> 
       <ContextMenu>               
        <MenuItem Header="Delete"/> 
       </ContextMenu> 
      </ListBox.ContextMenu> 

谁从我的列表框删除文件功能后:

private void MenuItemDelete_Click(object sender, RoutedEventArgs e) 
{    
    if (listBoxFiles.SelectedIndex == -1) 
    { 
     return; 
    } 

    //string filePath = (listBoxFiles.SelectedItem).ToString(); 
    int index = listBoxFiles.SelectedIndex; 
    listBoxFiles.Items.RemoveAt(index); 
} 

回答

1

不需要listBoxFiles_PreviewMouseRightButtonDown 当你写

<ListBox> 
      <ListBox.ContextMenu> 
       <ContextMenu> 
        <MenuItem Header="Delete"></MenuItem> 
       </ContextMenu> 
      </ListBox.ContextMenu> 
     </ListBox> 

它已经工作右击

+0

谢谢,我会在晚上和更新尝试。 – user979033 2012-03-04 10:27:57

+0

好的,谢谢,现在我该如何“捕捉”我点击的文件名(路径)? – user979033 2012-03-04 21:11:47

+0

我想在菜单中添加3个功能(菜单中的每个选项都有不同的功能),所以仍然需要检查哪个项目被点击了?并且我不明白函数中的最后2行MenuItemDelete_Click – user979033 2012-03-04 21:42:45

27

后,您已经有您的标记上下文菜单。

如果您想执行一些操作,其中一种方法是检查菜单的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); 
} 
+0

谢谢,我会在晚上尝试此操作并进行更新。 – user979033 2012-03-04 10:27:10

+0

我想在菜单中添加3个功能,所以仍然需要检查哪个项目被点击?我不明白函数中的最后2行MenuItemDelete_Click – user979033 2012-03-04 21:32:54

+0

我想在菜单中添加3个函数(菜单中的每个选项都有不同的功能),所以仍然需要检查哪个项目被点击了?并且我不明白函数中的最后2行MenuItemDelete_Click – user979033 2012-03-04 21:49:27

相关问题