C # WPF текст со ссылками
-
26-09-2019 - |
Вопрос
Я только что нашел новую задачу: сделать текстовый процессор, который находится в обработке больше, как в Интернете, чем обычный текст. Разработка хорошей рамки для этого - это то, что я не могу дождаться, чтобы начать, но мне нужно знать, какие возможности находятся на стороне GUI (она, вероятно, будет иметь множество проблем GUI).
Таким образом, основная вещь, которую мне нужен какой-то контроль, в котором я могу делать части моего текста кликабели / мыши сверхбеженым.
Я вроде новичок в WPF и не уверен, как это сделать. Кто-нибудь идея, как это сделать? Есть ли примеры? Есть ли уже контролирует для этого?
заранее спасибо
РЕДАКТИРОВАТЬ:
Я узнал какой-то способ сделать это с RichtextBox:
// Create a FlowDocument to contain content for the RichTextBox.
FlowDocument myFlowDoc = new FlowDocument();
// Add paragraphs to the FlowDocument.
Hyperlink myLink = new Hyperlink();
myLink.Inlines.Add("hyperlink");
myLink.NavigateUri = new Uri("http://www.stackoverflow.com");
// Create a paragraph and add the Run and hyperlink to it.
Paragraph myParagraph = new Paragraph();
myParagraph.Inlines.Add("check this link out: ");
myParagraph.Inlines.Add(myLink);
myFlowDoc.Blocks.Add(myParagraph);
// Add initial content to the RichTextBox.
richTextBox1.Document = myFlowDoc;
Теперь я получаю хорошую гиперссылку в моем текстовом поле ... за исключением, когда я нажимаю на нее, ничего не происходит. Что я здесь не хватает?
Решение
Вы можете использовать Гиперссылка сорт. Это FrameworkContEncentELement, так что вы можете использовать его в текстовом блоке или TextBlock или ToolDocument или где-нибудь еще, что вы можете встроить содержимое.
<TextBlock>
<Run>Text</Run>
<Hyperlink NavigateUri="http://stackoverflow.com">with</Hyperlink>
<Run>some</Run>
<Hyperlink NavigateUri="http://google.com">hyperlinks</Hyperlink>
</TextBlock>
Вы можете посмотреть на использование RichTextBox. как часть вашего редактора. Это пройдет поток потока, который может содержать содержание, такое как гиперссылки.
Обновление: Есть два способа обрабатывать щелчки на гиперссылке. Один состоит в том, чтобы справиться с Запроснавигация мероприятие. Это Маршрутизируемое событие, Таким образом, вы можете прикрепить обработчик к самой гиперссылке, либо можно прикрепить к элементу выше в дереве, таком как окно или RichtextBox:
// On a specific Hyperlink
myLink.RequestNavigate +=
new RequestNavigateEventHandler(RequestNavigateHandler);
// To handle all Hyperlinks in the RichTextBox
richTextBox1.AddHandler(Hyperlink.RequestNavigateEvent,
new RequestNavigateEventHandler(RequestNavigateHandler));
Другой способ использовать команда Установка Команда свойство на гиперссылку к Icommond. реализация. Выполненный метод на ICommand будет вызываться при нажатии гиперссылки.
Если вы хотите запустить браузер в обработчике, вы можете пройти URI для Процесс:
private void RequestNavigateHandler(object sender, RequestNavigateEventArgs e)
{
Process.Start(e.Uri.ToString());
}
Другие советы
Примечание. Также необходимо установить следующие свойства на вашем RichTextBox или гиперссылки будут отключены и не отключены события. Без ISREADONLY вам нужно Ctrl-щелкните гиперссылки, с помощью Isreadonly они стреляют с регулярным щелчком мыши.
<RichTextBox
IsDocumentEnabled="True"
IsReadOnly="True">
Самый простой способ - это обрабатывать requestnaviate событие, как это:
...
myLink.RequestNavigate += HandleRequestNavigate;
...
private void HandleRequestNavigate(object sender, RoutedEventArgs e)
{
var link = (Hyperlink)sender;
var uri = link.NavigateUri.ToString();
Process.Start(uri);
e.Handled = true;
}
Существуют некоторые проблемы с запуском браузера по умолчанию, передавая URL-адрес процессу. Найдите, и вы можете получить Google для лучшего способа реализации обработчика.