在加载的松散Flowdocument中处理所有Hyperlinks MouseEnter事件

时间:2011-03-28 22:12:10

标签: wpf events flowdocument mouseenter

我是WPF的新手,负责我的第一个项目。我已经被困在这个问题上一个星期,所以我试图在这里找到一些帮助。

我的应用程序中有一个FlowDocumentReader,它加载了几个FlowDocuments(独立文件作为松散的xaml文件)。

我需要处理已加载文档中所有超链接的MouseEnter事件,但是我无法在XAML中设置MouseEnter =“myHandler”,因为这是松散的XAML文件。

有没有办法解析de FlowDocument并在加载时设置处理程序?

还有其他解决方案吗?对不起新手问题,非常感谢A LOT。

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分:0)

查看http://xtrememvvm.codeplex.com/

它允许您直接从松散的XAML文件中挂钩事件处理程序。

没有文档,但使用路由命令和事件处理程序的示例应用程序演示。

  • 粘土