2010-06-25 40 views
3

我試圖在Winforms應用程序中實現我以前認爲理所當然的功能。我是Silverlight noob,所以希望這些都是基本的。右鍵單擊Silverlight 4應用程序中的列表框

我在Silverlight 4應用程序中有一個列表框。我想做到以下幾點:

  1. 在列表框中單擊鼠標右鍵
  2. 曾在那裏我點擊位置下的項目突出自身
  3. 我想一個上下文菜單項,彈出(與我在上下文菜單中自己的物品)

從我的研究,到目前爲止,似乎沒有文本菜單在Silverlight構建,相反,我們必須建立一個網格/帆布結構並將其連接到一個彈出對象,是什麼彈出。

我的問題如下:

  1. 爲了完成#2,我需要某種形式的命中測試在列表框。我無法弄清楚如何做到這一點,我的谷歌福並沒有幫助。
  2. 一旦我確定鼠標下的索引,我該如何選擇該項目?
  3. 是否有可重用的上下文菜單組件,我可以使用?如果組件允許任意子菜單,則額外獎勵。

回答

3

我一直在尋找同樣的事情。我查了Silverlight Control Toolkit在CodePlex上,並通過樣本(這是一個非常有用的資源)去了,這裏是我的發現是解決你問:

  1. 爲您的列表框創建一個ItemTemplate

  2. 在你想成爲「右點擊」您的ItemTemplate設置System.Windows.Controls.Input.Toolkit命名空間中存在的附加屬性ContextMenuService.ContextMenu部分

  3. 添加菜單項來控制你的文本菜單和點擊屬性設置爲相應的CL ICK事件處理

  4. 在事件處理程序,從發送方獲得的DataContext(你可以用它來尋找ListBox中相應的元素)

  5. ,使該元素選擇,只需設置在SelectedItem財產列表框中將其

  6. 添加任何自定義邏輯事件處理程序

有沒有在樣本頁面爲例,只需進入「輸入 - >文本菜單」在t他的導航窗格。

如果你想要的東西簡潔,這裏有一個簡單的例子:

<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; 
    } 

我希望這有助於:)

1

還有MouseRightButtonDown事件。如果你綁定在ListBox

<ListBox Height="143" Name="listBox1" Width="218" 
     MouseRightButtonDown="listBox1_MouseRightButtonDown" /> 

你會得到你所需要的。後面的代碼是:

private void listBox1_MouseRightButtonDown(object sender, MouseButtonEventArgs e) 
{ 
} 

MouseButtonEventArgs會給你通過GetPosition方法的位置。

相關問題