2010-10-26 5 views
3

Je souhaite créer une listview composée de plusieurs éléments d'une classe propre. L'une des propriétés est un texte qui peut contenir un ou plusieurs liens. Normalement j'utilise un bloc de texte avec une liaison sur le texte pour obtenir ce contenu affiché.Création dynamique de texte avec des liens cliquables dans la liaison

Maintenant, je veux que ces textes soient analysés pour les liens, puis les rendre dynamiquement cliquables. J'ai trouvé un certain code comme Add hyperlink to textblock wpf sur la façon de créer un bloc de texte avec des liens hypertexte, donc je serais bien - mais la liaison WPF est disponible sur la propriété Text, donc cela ne m'aide pas à la fin.

Y a-t-il un moyen de lier pour une liste d'éléments (ObservableCollection ou similaire) dans une listview pour avoir des liens cliquables dans le texte?

Thx à l'avance

Sven

Répondre

3

J'ai une solution simple. En utilisant DataTemplate, vous pouvez spécifier un modèle pour une classe, par exemple LinkItem qui contient votre texte et un hyperlien.

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}" /> 

Nice et simple. Ajoutez juste un tas de LinkItem à votre collection LinkItems et vous obtiendrez une belle combinaison de texte et de lien hypertexte dans votre zone de liste.

Vous pouvez également ajouter une commande dans la classe LinkItem pour rendre les choses un peu plus intéressantes et lier la commande au lien hypertexte.

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