2

首先 -这个问题正是我想要实现的,但没有运行时的开销Hyperlink

有没有办法捕捉更高级别的Click事件Hyperlink(例如 in Window)?

PreviewMouseDown事件给了我定位(通过或)的Run元素,而不是它本身。Hyperlinke.Sourcee.OriginalSourceHyperlink

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

为什么 Setter 属性不适用于超链接?

4

1 回答 1

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>

谢谢

于 2013-08-29T16:56:41.967 回答