2011-03-28 4 views
3

Я новичок в WPF, работая над своим первым проектом. Я застрял в этой проблеме в течение недели, поэтому я пытаюсь найти здесь какую-то помощь.Обработка всех гиперссылок Событие MouseEnter в загруженном свободном Flowdocument

У меня есть FlowDocumentReader внутри моего приложения, которое загружает несколько FlowDocuments (независимые файлы как свободные xaml-файлы).

Мне нужно обработать событие MouseEnter для всех гиперссылок в загруженном документе, но я не могу установить MouseEnter = "myHandler" в XAML, так как они являются свободными файлами XAML.

Есть ли способ разобрать FlowDocument и установить обработчики при загрузке?

Любое другое решение? Извините за вопрос для новичков, спасибо A LOT заранее.

ответ

2

После загрузки FlowDocument вы можете перечислить все UIElements, используя LogicalTreeHelper. Это позволит вам найти все гиперссылки. Затем вы можете просто подписаться на их событие 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 файлов.

Нет документов, но примеры демонстраций приложений с использованием маршрутизируемых команд и обработчиков событий.

  • Клей