2009-08-06 31 views

答えて

2

そこに行くにはいくつかのステップがありますが、それを行うことができます。

  1. バインド可能なものではなく、バインド可能なリッチテキストボックスを使用する必要があります。ここでの詳細:http://michaelsync.net/2009/06/09/bindable-wpf-richtext-editor-with-xamlhtml-convertor

  2. これを取得すると、ViewModelのFlowDocumentにバインドできるリッチテキストエディタが用意されます。

  3. あなたFlowDocumentが作成され、あなたのViewModelにHyperlink.ClickEventのハンドラをフックアップ:

ここ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; 
    //... 
} 

これはです私が今までに見たことだけです。 FlowDocumentsはデータ型と並べ替えの視覚的要素のようなものであるため、少し奇妙です。つまり、ViewModelに存在させるのは間違っていると感じますが、これが道です。

+0

私は今これを試していますが、リンクをクリックすると何も起こりません!カーソルは手に変更されません...どんな助け? – bluebit

+0

私はあなたがAddHandlerコールを見逃しているかもしれないと思いますか?書式を変更して見やすくしました。 –

+0

ありがとうございました!しかし、ハイパーリンクをクリックするとURLが2回表示されます。どうしましたか? –

1

wpfデータバインディングを使用できない多くのシナリオがあります。これらのシナリオでは、新しいコントロール(RichTextBoxから継承するなど)を作成し、欠落している依存プロパティを提供してデータバインディングを使用することができます。

ただし、単純なシナリオを処理するための新しいコントロールを作成するのは非効率的です。 Viewのコードビハインドファイルにコードを実装することは禁じられていません。新しいコントロールを作成するよりも、これはしばしば理にかなっています。

これを行う方法を具体的な例は、プロジェクトのViewModelにサンプルに示されている:

WPFアプリケーションフレームワーク(WAF)テキストが移入されている方法

http://waf.codeplex.com

関連する問題