【问题标题】:Handle all Hyperlinks MouseEnter event in a loaded loose Flowdocument处理加载的松散流文档中的所有超链接 MouseEnter 事件
【发布时间】:2011-07-24 20:28:30
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: wpf events flowdocument mouseenter


    【解决方案1】:

    加载 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>
    

    【讨论】:

      【解决方案2】:

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

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

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

      • 粘土

      【讨论】:

        猜你喜欢
        • 2011-10-28
        • 2016-08-07
        • 2016-03-11
        • 2013-10-02
        • 1970-01-01
        • 2022-01-16
        • 1970-01-01
        • 2021-12-23
        • 1970-01-01
        相关资源
        最近更新 更多