如何捕获容器中的超链接点击事件 - 松散耦合的方式?

时间:2013-08-29 16:42:45

标签: c# wpf events

首先 - this question正是我想要实现的目标,但没有步行每个Hyperlink的运行时开销。

有没有办法在较高级别(例如Click)中捕获Hyperlink Window事件?

PreviewMouseDown事件为我提供了Run所在的Hyperlink元素(通过e.Sourcee.OriginalSource),而不是Hyperlink本身

编辑 - 解决方案,感谢@nit:

Why Setter Property is not applied on Hyperlink?

1 个答案:

答案 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>

感谢