2011-03-28 24 views
3

私は最初のプロジェクトでWPFを使いました。私はこの問題に1週間悩まされているので、ここで何か助けを求めようとしています。すべてのハイパーリンクを処理MouseEnterイベントが読み込まれたLoose Flowdocumentで処理される

私はFlowDocumentReaderをいくつかのFlowDocuments(独立したファイルを緩いxamlファイルとして)にロードします。

ロードされたドキュメントのすべてのハイパーリンクに対してMouseEnterイベントを処理する必要がありますが、XAMLでMouseEnter = "myHandler"を設定することはできません。

FlowDocumentを解析し、ハンドラをロードするときにハンドラを設定する方法はありますか?

他の解決方法はありますか?初心者の質問に申し訳ありません、事前にたくさんありがとうございます。

答えて

2

FlowDocumentを読み込んだ後、LogicalTreeHelperを使用してすべてのUIElementを列挙できます。すべてのハイパーリンクを見つけることができます。その後、単にMouseEnterイベントに登録することができます。ここでは、コードは次のようになります。

void SubscribeToAllHyperlinks(object sender, RoutedEventArgs e) 
    { 
     var hyperlinks = GetVisuals(this).OfType<Hyperlink>(); 
     foreach (var link in hyperlinks) 
      link.MouseEnter += Hyperlink_MouseEnter; 
    } 

    public static IEnumerable<DependencyObject> GetVisuals(DependencyObject root) 
    { 
     foreach (var child in LogicalTreeHelper.GetChildren(root).OfType<DependencyObject>()) 
     { 
      yield return child; 
      foreach (var descendants in GetVisuals(child)) 
       yield return descendants; 
     } 
    } 

    private void Hyperlink_MouseEnter(object sender, MouseEventArgs e) 
    { 
     // Do whatever you want here 
    } 

私は、次のXAMLでそれをテストしてみた:

<FlowDocumentReader> 
    <FlowDocument> 
     <Paragraph> 
      <Hyperlink>asf</Hyperlink> 
     </Paragraph> 
    </FlowDocument> 
</FlowDocumentReader> 
+0

おかげであなたの助けのためにたくさん! – SantiagoARG

0

http://xtrememvvm.codeplex.com/

を見てみましょうそれはあなたが緩んでXAMLファイルからイベント・ハンドラに直接フックすることができます。

ドキュメントはありませんが、サンプルアプリケーションでは、ルーティングコマンドとイベントハンドラを使用してデモしています。

  • クレイ
関連する問題