首先 - this question正是我想要实现的目标,但没有步行每个Hyperlink
的运行时开销。
有没有办法在较高级别(例如Click
)中捕获Hyperlink
Window
事件?
PreviewMouseDown
事件为我提供了Run
所在的Hyperlink
元素(通过e.Source
或e.OriginalSource
),而不是Hyperlink
本身
答案 0 :(得分:3)
我认为这是您可以在PreviewMouseDown事件处理程序中执行的操作:
private void Window_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
Run r = e.OriginalSource as Run;
if(r != null)
{
Hyperlink hyperlink = r.Parent as Hyperlink;
if(hyperlink != null)
{
//Your code here
}
}
}
}
或者如果您希望将所有超链接点击重定向到ViewModel中的同一命令处理程序,您可以添加样式以执行此操作,如下所示:
<Style TargetType="{x:Type Hyperlink}">
<Setter Property="Command" Value="{Binding MyCommand, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}}"/>
<Setter Property="CommandParameter" Value="{Binding}"/>
</Style>
感谢