我有一些代碼旨在改變剪貼板上剪切/複製的內容,並且它完美適用於複製,但我無法讓Cut工作。如何處理Cuting使用CopyingHandler時
在XAML中,我定義了一個名爲rtbEditor RichTextBox的,在Loaded事件,我成立了CopyingHandler:
DataObject.AddPastingHandler(rtbEditor, new DataObjectPastingEventHandler(OnPaste));
DataObject.AddCopyingHandler(rtbEditor, new DataObjectCopyingEventHandler(OnCopy));
OnCopy是(簡體):
private void OnCopy(object sender, DataObjectCopyingEventArgs e)
{
// Expand the selection include whole paragraphs only:
TextPointer newStart = rtbEditor.Selection.Start.Parapgraph.ContentStart;
TextPointer newEnd = rtbEditor.Selection.End.Paragraph.ContentEnd;
rtbEditor.Selection.Select(newStart, newEnd);
// copy the selected text
TextRange range = new TextRange(rtbEditor.Selection.Start, rtbEditor.Selection.End);
Clipboard.SetText(range.Text);
e.CancelCommand();
}
該作品複製的奇蹟,但我遇到切割工作的問題。
我試着簡單地用rtbEditor.Selection.Select()來擴展選擇,就是這樣,但包含複製數據的DataObject在CopyingHandler被調用時已經被填充,所以改變選擇不會更改將放置在剪貼板中的內容。 (我仍然這樣做的視覺反饋給用戶,他們的選擇已擴大)
如果我刪除e.CancelCommand(),然後剪切將正確刪除文本,但只有原本是而不是展開的選擇,剪貼板將僅包含最初選擇的文本,而不包含展開的選擇。我假定,因爲該命令沒有取消,當剪切命令完成時,我的Clipboard.SetText()立即被DataObject的內容覆蓋。
我也無法找到發件人或DataObjectCopyingEventArgs中的任何區別此事件是Cut事件還是複製事件,所以我可以讓我的代碼刪除文本,如果它是Cut。
有沒有辦法在這裏區分Cut和Copy,我沒有看到?或者是否有一些事件可以吸引到這個過程的早期階段? MSDN表示CopyingHandler會在「複製操作完成轉換選定的內容時發生......」。但是在複製操作開始之前我找不到任何事件。或者我需要以完全不同的方式來解決這個問題?
我發現這是一個類似的問題在How to override copy and paste in richtextbox的意見,但沒有答案,有