C # WPF Текст со ссылками

Я только что нашел себе новую задачу: Сделайте текстовый процессор, который обрабатывает больше как веб, чем обычный текст. Я не могу дождаться начала разработки хорошей структуры для этого, но мне нужно знать, каковы возможности на стороне 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;

Теперь у меня есть хорошая гиперссылка в моем текстовом поле ... кроме случаев, когда Я нажимаю на это, ничего не происходит. что мне здесь не хватает?

7
задан yanckst 4 October 2017 в 14:51
поделиться

2 ответа

Вы можете использовать класс Hyperlink . Это FrameworkContentElement, поэтому вы можете использовать его в TextBlock или FlowDocument или в любом другом месте, где вы можете встраивать контент.

<TextBlock>
    <Run>Text</Run>
    <Hyperlink NavigateUri="http://stackoverflow.com">with</Hyperlink>
    <Run>some</Run>
    <Hyperlink NavigateUri="http://google.com">hyperlinks</Hyperlink>
</TextBlock>

Вы можете использовать RichTextBox как часть вашего редактора. Здесь будет размещен FlowDocument, который может содержать такое содержимое, как гиперссылки.


Обновление: есть два способа обрабатывать щелчки по гиперссылке. Один из них - обработать событие RequestNavigate . Это перенаправленное событие , поэтому вы можете либо прикрепить обработчик к самой гиперссылке, либо присоединить его к элементу выше в дереве, например к Window или RichTextBox:

// On a specific Hyperlink
myLink.RequestNavigate +=
    new RequestNavigateEventHandler(RequestNavigateHandler);
// To handle all Hyperlinks in the RichTextBox
richTextBox1.AddHandler(Hyperlink.RequestNavigateEvent,
    new RequestNavigateEventHandler(RequestNavigateHandler));

Другой способ - использовать команду , установив свойство Command в гиперссылке на реализацию ICommand . При щелчке по гиперссылке вызывается метод Executed для ICommand.

Если вы хотите запустить браузер в обработчике, вы можете передать URI в Process.Start :

private void RequestNavigateHandler(object sender, RequestNavigateEventArgs e)
{
    Process.Start(e.Uri.ToString());
}
21
ответ дан 6 December 2019 в 07:04
поделиться

Самый простой способ - обработать событие RequestNavigate следующим образом:


...
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-адреса в Process.Start, и вы можете захотеть погуглить, чтобы лучше способ реализовать обработчик.

1
ответ дан 6 December 2019 в 07:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: