我一直在寻找同样的东西。我检查了CodePlex 的Silverlight Control Toolkit并浏览了示例(这是一个非常方便的资源),这是我发现的解决您所问问题的方法:
为您的 ListBox 创建一个 ItemTemplate
在您希望成为 ItemTemplate 的“可右键单击”的部分中,设置命名空间ContextMenuService.ContextMenu
中存在的附加属性System.Windows.Controls.Input.Toolkit
将 MenuItem 控件添加到您的 ContextMenu 并将 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;
}
我希望这有帮助 :)