3

我是 WPF 的新手,正在做我的第一个项目。我已经被这个问题困了一个星期,所以我想在这里寻求帮助。

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

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

有什么方法可以解析 de FlowDocument 并在加载时设置处理程序?

还有其他解决方案吗?抱歉新手问题,提前非常感谢。

4

2 回答 2

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>
于 2011-03-28T22:37:10.053 回答
0

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

它允许您从松散的 XAML 文件直接连接到事件处理程序。

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

  • 黏土
于 2011-07-26T23:50:36.540 回答