Вопрос

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top