2017-01-18 1 views
2

Я попытался следующий код, но он бросает исключение System.ArgumentException, сообщение исключение:Как преобразовать выделенный текст в гиперссылку в RichEditBox

Значение не попадает в ожидаемый диапазон.

public void InsertLink(RichEditBox control) 
{ 
    control.Document.Selection.Link ="http://www.bing.com"; 
} 
+1

Что вызывает исключение? Какая линия? Что такое ошибка ** текст **? Где вы назвали функцию? – devRicher

+0

@devRicher: В вопросе есть только одна исполняемая строка, и в ней указан текст ошибки. –

+0

Я назвал его нажатием кнопки, передал ссылку RichEditBox –

ответ

3

текст он содержит, должны быть заключены в кавычки, необязательно предшествует дозорного характера 0xFDDF. Например: «http://www.msn.com» или 0xFDDF «http://www.msn.com».

Вы можете получить более подробную информацию по форме MSDN source.

Таким образом, вы должны изменить свой код так:

<StackPanel Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> 
    <RichEditBox x:Name="richeditbox" Height="200"> 
    </RichEditBox> 
    <Button Content="Convert to hypelink" Click="Button_Click"></Button> 
</StackPanel> 
private void Button_Click(object sender, RoutedEventArgs e) 
{ 
    richeditbox.Document.Selection.Link = "\"http://www.bing.com\""; 
} 
+0

необходимо вызвать Document.ApplyDisplayUpdates, чтобы увидеть изменения. Richeditbox.result.Document.ApplyDisplayUpdates(); –

1

ответ Ксавьера правильно; в соответствии с documentation вам нужно приложить URL-адрес в кавычки. Это будет регистрировать выбор только как ссылку на barebones без какого-либо специального вычисленного стиля (т. Е. Ваша ссылка не будет выглядеть иначе, чем обычный текст, но на самом деле это ссылка). Как правило, ссылки оформлены с подчеркиванием, и сделать так, вы бы отметить его как RTF field так:

var sel = control.Document.Selection; 
var rtf = @"{\rtf1{\field{\*\fldinst HYPERLINK ""http://www.bing.com""}{\fldrslt{\ul " + sel.Text + "}}}}"; 
sel.SetText(TextSetOptions.FormatRtf, rtf); 

Я не слишком хорошо знаком с RTF, так что я, если приведенный выше код не знаю это самый правильный способ, но он работает. Похоже, что API-интерфейсы с богатым текстом действительно не имеют приятного способа манипулирования полями, поэтому мне пришлось прибегать к необработанной разметке RTF.

Смежные вопросы