Handle all Hyperlinks MouseEnter event in a loaded loose Flowdocument

て烟熏妆下的殇ゞ 提交于 2019-11-29 15:22:59

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>

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
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!