Я искал то же самое. Я проверил Silverlight Control Toolkit в CodePlex и просмотрел примеры (это очень удобный ресурс), и вот что я нашел решением для того, что вы спросили:
Создать шаблон элемента для вашего ListBox
в той части, которую вы хотите, чтобы «щелкнув правой кнопкой мыши» вашего ItemTemplate, установите вложенное свойство ContextMenuService.ContextMenu
, которое существует в System.Windows.Controls.Input.Toolkit
пространстве имен
добавить элементы управления MenuItem в ContextMenu и установить свойство Click для соответствующего обработчика события click
в обработчике событий получите DataContext от отправителя (вы можете использовать его для поиска соответствующего элемента в ListBox)
, чтобы сделать этот элемент выбранным, просто установите для него свойство SelectedItem
в списке
Добавить любую пользовательскую логику в обработчик событий
На странице примеров есть пример, просто перейдите в «Input-> ContextMenu» из панели навигации.
Если вы хотите что-то краткое, вот упрощенный пример:
<ListBox ItemsSource="{StaticResource People}"
Name="myListBox">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}">
<controlsInputToolkit:ContextMenuService.ContextMenu>
<controlsInputToolkit:ContextMenu>
<controlsInputToolkit:MenuItem Header="Show in MessageBox"
Click="show_Click" />
</controlsInputToolkit:ContextMenu>
</controlsInputToolkit:ContextMenuService.ContextMenu>
</TextBlock>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
с:
xmlns:controlsInputToolkit="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Input.Toolkit"
для кода:
private void show_Click(object sender, RoutedEventArgs e)
{
var person = ((MenuItem)sender).DataContext as Person;
if (null == person) return;
MessageBox.Show("My Name is: " + person.Name);
myListBox.SelectedItem = person;
}
Надеюсь, это поможет:)