tôi đã cùng một vấn đề và quản lý để có được một cái gì đó như sau để làm việc:
public class MyRichTextBox : RichTextBox
{
public MyRichTextBox()
: base()
{
CommandManager.RegisterClassCommandBinding(typeof(MyRichTextBox),
new CommandBinding(ApplicationCommands.Copy, OnCopy, OnCanExecuteCopy));
}
private static void OnCanExecuteCopy(object target, CanExecuteRoutedEventArgs args)
{
MyRichTextBox myRichTextBox = (MyRichTextBox)target;
args.CanExecute = myRichTextBox.IsEnabled && !myRichTextBox.Selection.IsEmpty;
}
private static void OnCopy(object sender, ExecutedRoutedEventArgs e)
{
MyRichTextBox myRichTextBox = (MyRichTextBox)sender;
Clipboard.SetText(GetInlineText(myRichTextBox));
e.Handled = true;
}
private static string GetInlineText(RichTextBox myRichTextBox)
{
StringBuilder sb = new StringBuilder();
foreach (Block b in myRichTextBox.Document.Blocks)
{
if (b is Paragraph)
{
foreach (Inline inline in ((Paragraph)b).Inlines)
{
if (inline is InlineUIContainer)
{
InlineUIContainer uiContainer = (InlineUIContainer)inline;
if (uiContainer.Child is Button)
sb.Append(((Button)uiContainer.Child).Content);
}
else if (inline is Run)
{
Run run = (Run)inline;
sb.Append(run.Text);
}
}
}
}
return sb.ToString();
}
}
Tất nhiên điều này là rất đơn giản - có thể bạn sẽ tạo ra một lớp con của Button và xác định một giao diện-chức năng như "GetCopyToClipboardText" thay vì có "làm thế nào để có được văn bản từ một nút" -code bên trong richtextbox.
Ví dụ sao chép tất cả văn bản bên trong richtextbox - nó sẽ hữu ích hơn nếu chỉ phần được chọn của hộp văn bản được sao chép vào khay nhớ tạm. This post đưa ra ví dụ về cách đạt được điều đó.
Nguồn
2010-03-05 13:36:44