Динамически создаваемый текст с кликабельными ссылками в нем посредством привязки - PullRequest
4 голосов
/ 26 октября 2010

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

Теперь я хочу, чтобы этот текст анализировался на наличие ссылок, а затем динамически делал эти ссылки кликабельными. Я нашел довольно код, например Добавление гиперссылки к текстовому блоку wpf о том, как создать текстовый блок с гиперссылками, так что все будет в порядке - но привязка WPF доступна в свойстве Text, поэтому это не поможет конец.

Так есть ли способ связывания списка элементов (ObservableCollection или аналогичных) в просмотре списка, чтобы ссылки в тексте можно было нажимать?

Спасибо заранее

Свен

1 Ответ

3 голосов
/ 27 октября 2010

У меня есть простое решение.

Используя DataTemplate, вы можете указать шаблон для класса, например, LinkItem, который содержит ваш текст, и гиперссылку.

public class LinkItem
{
    public string Text { get; set; }
    public string Hyperlink { get; set; }

    public LinkItem(string text, string hyperlink)
    {
        Text = text;
        Hyperlink = hyperlink;
    }
}

// XAML Data template
<DataTemplate DataType="{x:Type HyperlinkDemo:LinkItem}">
    <TextBlock>
        <TextBlock Text="{Binding Text}" Margin="1" />
        <Hyperlink>
            <TextBlock Text="{Binding Hyperlink}" Margin="1" />
        </Hyperlink>
    </TextBlock>
</DataTemplate>

// List box definition
<ListBox ItemsSource="{Binding LinkItems}" />

Красиво и просто. Просто добавьте связку LinkItem в свою коллекцию LinkItems, и вы получите хорошее сочетание текста и гиперссылки в своем списке.

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

<Hyperlink Command="{Binding HyperlinkCommand}"> ....
...