2011-06-08 49 views
1

我有一個GridView像如下:WPF ListView的GridView控件複製到剪貼板

<ListView ItemsSource="{Binding Path=Foo, Mode=OneWay}"> 
     <ListView.View> 
      <GridView> 
       <GridViewColumn Header="Full name" 
           DisplayMemberBinding="{Binding Path=FullName}" /> 

所有我想的是,按按Ctrl + C所有(或選擇項),當複製到剪貼板。目前不是。我正在使用WPF 3.0

部分回答WPF listbox copy to clipboard但我需要看起來更簡單,我想也有一個更簡單的解決方案。

PS:此GridView不支持內置列排序等。如果你知道一個更好的免費控件,並且支持複製,可以隨意將其作爲解決方案。

+0

我已經使用ContextMenu在沒有Ctrl + C快捷鍵的情況下提供類似的功能(因爲Command =「Copy」是灰色的)。 – Wernight 2011-06-08 14:23:54

回答

3

我花了一些時間來回答這個問題,所以這裏就是我這樣做是爲了節省別人時間:

功能將數據複製到剪貼板,同時也解決了在右邊獲得行的問題爲了得到的字符串:

void copy_selected() 
{ 
    if (listview.SelectedItems.Count != 0) 
    { 
     //where MyType is a custom datatype and the listview is bound to a 
     //List<MyType> called original_list_bound_to_the_listview 
     List<MyType> selected = new List<MyType>(); 
     var sb = new StringBuilder(); 
     foreach(MyType s in listview.SelectedItems) 
      selected.Add(s); 
     foreach(MyType s in original_list_bound_to_the_listview) 
      if (selected.Contains(s)) 
       sb.AppendLine(s.ToString());//or whatever format you want 
     try 
     { 
      System.Windows.Clipboard.SetData(DataFormats.Text, sb.ToString()); 
     } 
     catch (COMException) 
     { 
      MessageBox.Show("Sorry, unable to copy surveys to the clipboard. Try again."); 
     } 
    } 
} 

我仍然有與A收到COMException偶爾的問題時,我的東西複製到剪貼板,因此在try-catch。我似乎已經通過清除剪貼板來解決這個問題(以一種非常糟糕和懶惰的方式),見下文。

並綁定該爲Ctrl + C

void add_copy_handle() 
{ 
    ExecutedRoutedEventHandler handler = (sender_, arg_) => { copy_selected(); }; 
    var command = new RoutedCommand("Copy", typeof(GridView)); 
    command.InputGestures.Add(new KeyGesture(Key.C, ModifierKeys.Control, "Copy")); 
    listview.CommandBindings.Add(new CommandBinding(command, handler)); 
    try 
    { System.Windows.Clipboard.SetData(DataFormats.Text, ""); } 
    catch (COMException) 
    { } 
} 

這是從所謂:

public MainWindow() 
{ 
    InitializeComponent(); 
    add_copy_handle(); 
} 

顯然,這是複製了很多從上面的鏈接,只是簡單但我希望它是非常有用的。