[英]Right-click on a Listbox in a Silverlight 4 app
我試圖在Winforms應用程序中實現我以前認為理所當然的東西。 我是一個Silverlight菜鳥,所以希望這一切都是基本的。
我在Silverlight 4應用程序中有一個列表框。 我想做以下事情:
從我到目前為止的研究來看,似乎Silverlight中沒有ContextMenu構造,而是我們必須構建一個Grid / Canvas結構並將其附加到Popup對象,然后彈出該對象。
我的問題如下:
我一直在四處尋找同樣的事情。 我檢查了CodePlex上的Silverlight Control Toolkit並瀏覽了樣本(這是一個非常方便的資源),這就是我發現的問題的解決方案:
為ListBox創建一個ItemTemplate
在您想要“右鍵單擊”ItemTemplate的部分中,設置System.Windows.Controls.Input.Toolkit
命名空間中存在的附加屬性ContextMenuService.ContextMenu
將MenuItem控件添加到ContextMenu,並將Click屬性設置為相應的單擊事件處理程序
在事件處理程序中,從發件人獲取DataContext(您可以使用它來查找ListBox中的相應元素)
要使該元素為Selected,只需在列表框中設置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;
}
我希望這有幫助 :)
有MouseRightButtonDown
事件。 如果你在ListBox
上綁定它:
<ListBox Height="143" Name="listBox1" Width="218"
MouseRightButtonDown="listBox1_MouseRightButtonDown" />
你會得到你需要的東西。 背后的代碼是:
private void listBox1_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
{
}
MouseButtonEventArgs
將通過GetPosition
方法為您提供位置。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.