Hai già un menu contestuale con il vostro codice.
Se si desidera eseguire un'operazione, uno dei modi è controllare quale elemento è stato fatto clic nella funzione Click del menu. Ad esempio, si ha la seguente casella di riepilogo:
<ListBox Name="someListBox">
<ListBox.ContextMenu>
<ContextMenu>
<MenuItem Header="Delete" Click="MenuItemDelete_Click"/>
</ContextMenu>
</ListBox.ContextMenu>
<ListBoxItem>...</ListBoxItem>
<ListBoxItem>...</ListBoxItem>
<ListBoxItem>...</ListBoxItem>
</ListBox>
E funzione potrebbe essere il prossimo:
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);
}
Aggiornato 5 Marzo 2012:
Ecco un'altra variante della vostra casella di riepilogo. È possibile aggiungere un menu di scelta rapida non alla casella di riepilogo ma agli elementi della casella di riepilogo. Per esempio:
<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) Questa funzione unsellect tutti gli elementi quando si fa clic su uno spazio vuoto nella casella di riepilogo:
private void someListBox_MouseDown(object sender, MouseButtonEventArgs e)
{
someListBox.UnselectAll();
}
2) Quando si sceglie la voce lisboxt, è blu. Quando fai clic con il pulsante destro del mouse sull'elemento casella di riepilogo, è ancora blu, ma se viene visualizzato un menu di scelta rapida, l'elemento della casella di riepilogo diventa grigio, forse è così perché questo elemento perde il focus.
3) la funzione Cancella funziona bene:
private void MenuItemDelete_Click(object sender, RoutedEventArgs e)
{
if (someListBox.SelectedIndex == -1)
{
return;
}
someListBox.Items.RemoveAt(someListBox.SelectedIndex);
}
grazie, cercherò questo alla sera e di aggiornamento. – user979033
OK grazie, ora come posso "catturare" il nome del file (percorso) su cui ho fatto clic? – user979033
voglio aggiungere 3 funzioni nel menu (ogni opzione nel menu avrà una funzione diversa) quindi è ancora necessario controllare quale elemento è stato cliccato? e non ho capito le ultime 2 righe nella funzione s MenuItemDelete_Click – user979033