У нас есть элемент управления RichTextBox WPF, и поскольку мы контролируем макет, мы просто не можем допустить никакого расширенного содержимого ...
Для этого нам нужно удалить все данные, кроме текста из буфера обмена. Например, если кто-то пытается скопировать / вставить, скажем, текст из таблицы непосредственно из Microsoft Word, RichTextBox также учитывает, что этот текст был 1. изначально из таблицы, 2. выделен жирным шрифтом и 3. подчеркнут, и создайте все виды встроенного содержимого для размещения всех этих свойств текста ...
Это неуместное поведение в нашем случае, потому что оно может нарушить наши встроенные макеты .. нам просто нужен чистый текст ...
Самый простой подход в команде предварительного вставки:
Clipboard.SetText(Clipboard.GetText());
и покончим с этим ... Но вы уже догадались ... Операции с буфером обмена не допускаются при частичном доверии ...
Мы также попробовали грязный и неприятный хак, используя скрытое текстовое поле, предложенное по этой ссылке:
http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/5b5bcd71-2eea-4762-bf65-84176c919fce/
Вот так:
public static class ClipboardManager
{
private static readonly TextBox textBox = new TextBox {AcceptsReturn = true, AcceptsTab = true};
public static void SetText(string text)
{
textBox.Text = text;
textBox.SelectAll();
textBox.Copy();
}
public static string GetText()
{
textBox.Clear();
textBox.Paste();
return textBox.Text;
}
}
А затем назовите это так:
ClipboardManager.SetText(ClipboardManager.GetText());
Это хорошо работает при полном доверии, но по какой-то причине методы TextBox и Copy, и Paste не работают при частичном доверии ...
Кто-нибудь знает, как извлечь содержимое буфера обмена в WPF / частичное доверие?
Спасибо
Редактировать: Как указал Нир .. Я знаю, что не очень приятно изменять данные из буфера обмена .. Но на мой вопрос ответят точно так же, если кто-то может просто указать мне, как получить только текст из буфера обмена при частичном доверии :))