Как извлечь текст из буфера обмена при частичном доверии - PullRequest
0 голосов
/ 20 января 2009

У нас есть элемент управления 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 / частичное доверие?

Спасибо

Редактировать: Как указал Нир .. Я знаю, что не очень приятно изменять данные из буфера обмена .. Но на мой вопрос ответят точно так же, если кто-то может просто указать мне, как получить только текст из буфера обмена при частичном доверии :))

Ответы [ 2 ]

0 голосов
/ 26 марта 2012

Это просто невозможно.

В конце мы использовали кнопку-переключатель, с помощью которой вы можете переключиться в текстовое поле, вставить его туда и вернуться к нашему элементу управления. Противно, но работает.

0 голосов
/ 20 января 2009

http://msdn.microsoft.com/en-us/library/aa970910.aspx говорит только «Поддержка открытого текста и чернильного буфера обмена» при частичном доверии. Требуется полное доверие для «буфера обмена форматированного текста»

...