Handle all Hyperlinks MouseEnter event in a loaded loose Flowdocument

前端 未结 2 550
伪装坚强ぢ
伪装坚强ぢ 2020-12-21 09:22

I\'m new to WPF, working on my first project. I\'ve been stuck in this problem for a week so I\'m trying to find some help here.

I have a FlowDocumentReader inside m

相关标签:
2条回答
  • 2020-12-21 09:44

    After loading your FlowDocument you can enumerate all UIElements using LogicalTreeHelper. It will allow you to find all hyperlinks. Then you can simply subscribe to their MouseEnter event. Here is a code:

        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
        }
    

    I've tested it with following XAML:

    <FlowDocumentReader>
        <FlowDocument>
            <Paragraph>
                <Hyperlink>asf</Hyperlink>
            </Paragraph>
        </FlowDocument>
    </FlowDocumentReader>
    
    0 讨论(0)
  • 2020-12-21 09:45

    Take a look at http://xtrememvvm.codeplex.com/

    It lets you hook directly into events handlers from loose XAML files.

    No docs, but the sample app demos using routed commands and event handlers.

    • Clay
    0 讨论(0)
提交回复
热议问题