Masz już menu kontekstowe ze znaczników.
Jeśli chcesz wykonać jakąś operację, jednym ze sposobów jest sprawdzenie, który element został kliknięty w funkcji Click menu. Na przykład, masz następnego listbox:
<ListBox Name="someListBox">
<ListBox.ContextMenu>
<ContextMenu>
<MenuItem Header="Delete" Click="MenuItemDelete_Click"/>
</ContextMenu>
</ListBox.ContextMenu>
<ListBoxItem>...</ListBoxItem>
<ListBoxItem>...</ListBoxItem>
<ListBoxItem>...</ListBoxItem>
</ListBox>
i funkcja może być następny:
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);
}
Updated 5 marca 2012:
Oto kolejny wariant swojego listbox. Możesz dodać menu kontekstowe nie do listbox, ale do elementów listbox. Na przykład:
<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) Funkcja ta unsellect wszystkie przedmioty po kliknięciu na pustej przestrzeni w polu listy:
private void someListBox_MouseDown(object sender, MouseButtonEventArgs e)
{
someListBox.UnselectAll();
}
2) Po kliknięciu elementu lisboxt jest niebieski. Kiedy klikniesz prawym przyciskiem myszy element listy, pozostanie on niebieski, ale jeśli pojawi się menu kontekstowe, element listbox staje się szary, może dlatego, że ten przedmiot traci fokus.
3) funkcji Delete działa dobrze:
private void MenuItemDelete_Click(object sender, RoutedEventArgs e)
{
if (someListBox.SelectedIndex == -1)
{
return;
}
someListBox.Items.RemoveAt(someListBox.SelectedIndex);
}
dzięki, postaram to w godzinach wieczornych i aktualizacji. – user979033
OK, dzięki, jak mogę "złapać" nazwę pliku (ścieżki), którą kliknąłem? – user979033
Chcę dodać 3 funkcje w menu (każda opcja w menu będzie miała inną funkcję), więc nadal konieczne jest sprawdzenie, który element został kliknięty? i nie rozumiem ostatnich 2 linii w funkcji s MenuItemDelete_Click – user979033