2011-03-28 44 views
3

我是WPF的新手,正在處理我的第一個項目。我一直困在這個問題一個星期,所以我想在這裏找到一些幫助。處理所有超鏈接MouseEnter事件中加載的鬆散Flowdocument

我在我的應用程序中有一個FlowDocumentReader,加載了幾個FlowDocuments(獨立文件作爲鬆散的xaml文件)。

我需要處理加載文檔中所有超鏈接的MouseEnter事件,但是我無法在XAML中設置MouseEnter =「myHandler」,因爲它們是鬆散的XAML文件。

有什麼辦法來解析deFlowDocument並設置處理程序加載時?

任何其他解決方案?對不起,新手問題,先謝謝你了。

回答

2

加載您的FlowDocument後,您可以使用LogicalTreeHelper來枚舉所有UIElements。它可以讓你找到所有的超鏈接。那麼你可以簡單地訂閱他們的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 2011-03-30 17:52:44

0

http://xtrememvvm.codeplex.com/

它可以讓你直接掛到鬆散XAML文件的事件處理程序看看。

沒有文檔,但示例應用程序演示使用路由命令和事件處理程序。

  • 克萊
相關問題