Кликабельная ссылка внутри текстового элемента управления, как RichTextControl в WPF? - PullRequest
1 голос
/ 30 ноября 2010

Я хочу, чтобы текст можно было кликать, как на веб-страницах в WPF.Элемент управления должен иметь как не функциональный текст (для отображения), так и некоторые его части как полностью интерактивные.

Скажите, как Википедия.

Но это независимое автономное автономное приложение.

Я пробовал разные вещи, но я не мог этого сделать, особенно нажатие не работает как веб-страницы, т. Е. 1 щелчок, чтобы открыть URL, содержащийся в инструментах.

Ответы [ 2 ]

1 голос
/ 30 ноября 2010

Если у вас нет требования, чтобы это был полноценный FlowDocument, тогда вы можете просто использовать старый текстовый блок WPF и вставить в него гиперссылки.

<TextBlock>
    Here's some text with a
    <Hyperlink NavigateUri="Page2.xaml">link to another XAML page</Hyperlink>
    and a
    <Hyperlink NavigateUri="http://msdn.microsoft.com/">link to the
    Web</Hyperlink>.
</TextBlock>

Если вам нужна прокрутка, просто поместите ScrollViewer вокруг нее.

Если вам нужен многостолбцовый просмотрщик с разбивкой по страницам, вам понадобится универсальный FlowDocument, но если вам нужен только текст с гиперссылками, TextBlock + Hyperlink - все, что вам нужно.

1 голос
/ 30 ноября 2010

Вы должны попытаться установить потоковый документ вручную и создать гиперссылки в потоковом документе ...

Вот текст, взятый по следующей ссылке: http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/99ae9d9c-1dd4-4acd-8d5d-6eb739adeb98

» Привет,

Это возможно. Вот небольшой пример создания гиперссылки на абзац / раздел / таблицу.

Чтобы перейти на сайт, мы можем создать элемент управления Frame для навигации. Иерархическое отношение элементов в этом примере выглядит следующим образом:

Frame -> FlowDocument -> Таблица -> Раздел -> Абзац -> гиперссылок

В коде позади:

public Window1()
        {
            InitializeComponent();

            // add a Frame for navigation
            Frame frame = new Frame();
            this.Content = frame;
            //add FlowDocument
            FlowDocument doc = new FlowDocument();
            frame.Navigate(doc);

            //add Table
            Table table = new Table();
            doc.Blocks.Add(table );
            TableRowGroup group = new TableRowGroup();
            table.RowGroups.Add(group );

            TableColumn col1 = new TableColumn();
            TableColumn col2 = new TableColumn();
            table.Columns.Add(col1 );
            table.Columns.Add(col2);

            TableRow row1 = new TableRow();
            TableCell cel1 = new TableCell();
            row1.Cells.Add(cel1);

            group.Rows.Add(row1);

            //add Section
            Section mySection = new Section();
            //add section to the Table cell.
            cel1.Blocks.Add(mySection);

            Paragraph paraValue = new Paragraph();
            Hyperlink hl = new Hyperlink(new Run("Click Here to Google"));
            hl.Foreground = Brushes.Red;
            paraValue.Inlines.Add(hl);

            hl.FontSize = 11;
            hl .NavigateUri =new Uri ("Http://www.google.cn");

            mySection.Blocks.Add(paraValue);
        }

Если у вас есть дополнительные вопросы по этому поводу, пожалуйста, не стесняйтесь спрашивать.

Спасибо. «

...