2017-08-08 66 views
1

我想有一個右鍵菜單在我的ListView單擊某個項目時上下文菜單中的ListView,選擇一個項目

<ListView x:Name="resultsView" Grid.Column="1" Margin="10" Grid.Row="1" FontFamily="Verdana" FontSize="14"> 
     <ListView.ContextMenu> 
      <ContextMenu FontFamily="Verdana" FontSize="14"> 
       <MenuItem Header="Open Folder" Click="openFolder_Click" FontFamily="Verdana" FontSize="14"/> 
       <Separator/> 
       <MenuItem Header="Copy Path" Click="copyPath_Click" FontFamily="Verdana" FontSize="14"/> 
      </ContextMenu> 
     </ListView.ContextMenu> 

     <ListView.View> 
      <GridView x:Name="gridView"> 
       <GridViewColumn x:Name="name" Header="Name" DisplayMemberBinding="{Binding Name}"/> 
       <GridViewColumn x:Name="folder" Header="Folder" DisplayMemberBinding="{Binding Folder}"/> 
       <GridViewColumn x:Name="location" Header="Path" DisplayMemberBinding="{Binding Location}"/> 
      </GridView> 
     </ListView.View> 
</ListView> 

這是我如何將項目添加到我的ListView(結果是SearchFolder的公司的列表):

results.Add(new SearchFolder { Name = Path.GetFileName(directory), Folder = Path.GetFileName(Path.GetDirectoryName(directory)), Location = directory }); 
resultsView.ItemsSource = results; 

而且我SearchFolder的類

class SearchFolder 
{ 
    public string Name { get; set; } 

    public string Folder { get; set; } 

    public string Location { get; set; } 
} 

如何創建一個文本菜單,其中的操作(複製路徑或OPE n文件夾)在ListView中點擊的項目上執行?

/編輯:這樣,無論在哪裏右鍵單擊,ContextMenu都會顯示出來。但我不能找到一種方法來訪問點擊項目,這不起作用:

MenuItem temp = sender as MenuItem; 
     if (temp != null) 
     { 
      ContextMenu anotherTemp = temp.Parent as ContextMenu; 
      if (anotherTemp != null) 
      { 
       ListViewItem clickedItem = anotherTemp.PlacementTarget as ListViewItem; 
       if (clickedItem != null) 
       { 
        Console.WriteLine("Copy Path " + clickedItem.Name); 
       } 
      } 
     } 

回答

0

我終於設法做我想做的事,我離開了上下文菜單是之前並能夠獲得與下面的代碼的項目在事件處理程序的文本菜單

if(resultsView.SelectedIndex>-1) 
     { 
      SearchFolder selectedItem; 
      selectedItem = (SearchFolder)resultsView.SelectedItem; 
      //do stuff with selectedItem 
     } 
+0

比預期容易得多,很好! –

3

的ListView有一個事件「的SelectionChanged」。用這個事件,你可以設置所有的代碼在此事件,並訪問項目在發件人中。

代碼:

<ListBox Grid.Row="1" Grid.Column="1" Margin="10,10,0,0" x:Name="lstBank" Style="{StaticResource TransparentListBox}" ItemTemplate="{StaticResource BankDataTemplate}" 
        MinHeight="35" MaxHeight="220" SelectionMode="Single" ItemsSource="{Binding Path=Banks}" ScrollViewer.HorizontalScrollBarVisibility="Disabled" SelectionChanged="lstBank_SelectionChanged" /> 

,並在類文件中設置代碼。

private void lstBank_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e) { 

     } 
0

試試這個在您的單擊事件處理程序:

private void ItemRightClick(object sender, EventArgs e) 
{ 
    MenuItem item = sender as MenuItem; 
    if (item!= null) 
    { 
     ContextMenu contextMenu = item.Parent; 
     Control clickedControl = contextMenu.SourceControl; 
    } 
} 

沒有檢查它...

不管怎麼說,這樣做是使用「的MouseDown」事件和檢查的另一種方式如果點擊的按鈕是正確的:

private void ItemMouseDown(object sender, MouseEventArgs e) 
{ 
    if(e.Button == MouseButtons.Right) 
    { 
      ListViewItem item = listView.GetItemAt(e.X, e.Y); 
      if(item != null) 
      { 
      // here we have 
      } 
    } 
} 
+0

的的MenuItems沒有GetContextMenu(),我需要添加一個使用......什麼東西? – SirChregeli

+0

對不起,我搞砸了Android或什麼... 嘗試與item.Parent,然後調用.SourceControl上下文菜單 –

+0

如果我做ContextMenu contextMenu =(ContextMenu)item.Parent;該線路的工作,但.SourceControl仍然不可用 – SirChregeli

相關問題