我是WPF的新手,负责我的第一个项目。我已经被困在这个问题上一个星期,所以我试图在这里找到一些帮助。
我的应用程序中有一个FlowDocumentReader,它加载了几个FlowDocuments(独立文件作为松散的xaml文件)。
我需要处理已加载文档中所有超链接的MouseEnter事件,但是我无法在XAML中设置MouseEnter =“myHandler”,因为这是松散的XAML文件。
有没有办法解析de FlowDocument并在加载时设置处理程序?
还有其他解决方案吗?对不起新手问题,非常感谢A LOT。
答案 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)