我花了一些時間來回答這個問題,所以這裏就是我這樣做是爲了節省別人時間:
功能將數據複製到剪貼板,同時也解決了在右邊獲得行的問題爲了得到的字符串:
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();
}
顯然,這是複製了很多從上面的鏈接,只是簡單但我希望它是非常有用的。
我已經使用ContextMenu在沒有Ctrl + C快捷鍵的情況下提供類似的功能(因爲Command =「Copy」是灰色的)。 – Wernight 2011-06-08 14:23:54