2012-03-03 13 views
10

tengo Listbox con archivos, quiero poder hacer clic derecho y abrir un menú como Eliminar para eliminar archivos del Listbox.cómo hacer clic derecho en el elemento de Listbox y abrir el menú en WPF

Actualmente tengo esta función después haga clic derecho sobre el tema dentro de mi cuadro de lista

private void listBoxFiles_PreviewMouseRightButtonDown(object sender, MouseButtonEventArgs e) 
{ 

} 

y pongo en práctica en XAML menu Borrar después haga clic derecho

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

la función que eliminar el archivo de mi cuadro de lista:

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

Respuesta

1

no necesita listBoxFiles_PreviewMouseRightButtonDown cuando escribió

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

ya se está trabajando después de hacer clic derecho

+0

gracias, voy a tratar esto en la noche y al día. – user979033

+0

OK gracias, ¿ahora cómo puedo "atrapar" el nombre de archivo (ruta) en el que hice clic? – user979033

+0

Quiero agregar 3 funciones en el menú (cada opción en el menú tendrá una función diferente) por lo que aún es necesario verificar en qué elemento se hizo clic. y no entendí las 2 últimas líneas en la función s MenuItemDelete_Click – user979033

27

Ya tiene un menú contextual con su margen de beneficio.

Si desea realizar alguna operación, una de las formas es verificar en qué elemento se hizo clic en la función Hacer clic en el menú. Por ejemplo, usted tiene el siguiente cuadro de lista:

<ListBox Name="someListBox"> 
    <ListBox.ContextMenu> 
     <ContextMenu> 
      <MenuItem Header="Delete" Click="MenuItemDelete_Click"/> 
     </ContextMenu> 
    </ListBox.ContextMenu> 

    <ListBoxItem>...</ListBoxItem> 
    <ListBoxItem>...</ListBoxItem> 
    <ListBoxItem>...</ListBoxItem> 

</ListBox> 

y función puede ser el siguiente:

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

Actualizado hace 5 marzo de 2012:

Aquí es otra variante de su cuadro de lista. Puede agregar un menú contextual no a listbox sino a los elementos de la lista. Por ejemplo:

<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) Esta función se unsellect todos los artículos cuando se hace clic en el espacio vacío en el cuadro de lista:

private void someListBox_MouseDown(object sender, MouseButtonEventArgs e) 
{ 
    someListBox.UnselectAll(); 
} 

2) Al hacer clic en el elemento lisboxt, es azul. Cuando hace clic con el botón derecho en el elemento de la caja de lista, sigue siendo azul, pero si aparece un menú contextual, el elemento de la caja de lista se vuelve gris, tal vez sea así porque este elemento pierde un foco.

3) Función de la cancelación funciona bien:

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

    someListBox.Items.RemoveAt(someListBox.SelectedIndex); 
} 
+0

gracias, intentaré esto en la noche y la actualización. – user979033

+0

Quiero agregar 3 funciones en el menú, así que aún es necesario verificar en qué elemento se hizo clic. y no entendí las últimas 2 líneas en la función s MenuItemDelete_Click – user979033

+0

quiero agregar 3 funciones en el menú (cada opción en el menú tendrá una función diferente) por lo que aún es necesario verificar en qué elemento se hizo clic. y no entendí las 2 últimas líneas en la función s MenuItemDelete_Click – user979033

Cuestiones relacionadas