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);
}
gracias, voy a tratar esto en la noche y al día. – user979033
OK gracias, ¿ahora cómo puedo "atrapar" el nombre de archivo (ruta) en el que hice clic? – user979033
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