2009-08-06 6 views

Répondre

2

C'est quelques étapes pour y arriver, mais vous pouvez le faire.

  1. Vous devez utiliser une zone de texte enrichi, plutôt que celle fournie avec WPF, que vous ne pouvez pas lier. Détails ici: http://michaelsync.net/2009/06/09/bindable-wpf-richtext-editor-with-xamlhtml-convertor

  2. Une fois que vous avez cela, vous aurez un éditeur de texte enrichi que vous pouvez lier à un FlowDocument dans votre ViewModel.

  3. Lorsque votre FlowDocument est créé, HookUp un gestionnaire pour l'Hyperlink.ClickEvent dans votre ViewModel:

est ici l'appel qui ajoute le gestionnaire à la FlowDoc

TheDocument.AddHandler(Hyperlink.ClickEvent, 
    new RoutedEventHandler(HandleHyperlinkClick)); 


//Here's the handler definition  
private void HandleHyperlinkClick(object sender, RoutedEventArgs args) 
{ 
    Hyperlink link = args.Source as Hyperlink; 
    //... 
} 

C'est la seule chose que j'ai jamais vue. Les FlowDocuments sont un peu étranges car ils sont en quelque sorte un type de données et une sorte d'élément visuel, donc dans un certain sens, il est mal vu de les avoir dans votre ViewModel, mais c'est la voie à suivre.

+0

J'essaye ceci maintenant, mais rien ne se produit quand je clique sur un lien! Le curseur ne change même pas à une main ... aucune aide? – bluebit

+0

Je pense que vous pourriez manquer l'appel AddHandler? J'ai changé la mise en forme, donc c'est plus facile à voir. –

+0

Merci beaucoup! Cela a fonctionné, cependant quand je clique sur l'hyperlien l'URL montre deux fois! Qu'est-ce qui ne va pas? –

1

Vous trouverez beaucoup de scénarios dans lesquels il n'est pas possible d'utiliser la liaison de données wpf. Dans ces scénarios, vous pouvez créer un nouveau contrôle (par exemple hériter de RichTextBox) et fournir les propriétés de dépendance manquantes afin que vous puissiez utiliser la liaison de données. Toutefois, créer un nouveau contrôle pour gérer des scénarios simples est inefficace. Il n'est pas interdit d'implémenter du code dans le code de View derrière le fichier, ce qui est souvent plus logique que de créer un nouveau contrôle.

Un exemple concret comment cela peut se faire est illustré dans l'exemple ViewModel du projet:

WPF Application Framework (WAF)

http://waf.codeplex.com

Questions connexes