私は同じことを探し回っています。私は 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;
}
これが役立つことを願っています:)