是否可以在 RelayCommand 中设置 e.Handled = true?

Is it possible to set e.Handled = true in a RelayCommand?

所以我有一个超链接,我已经像这样连接到后面的代码:

Xaml

<TextBlock x:Name="Hyperlink" HorizontalAlignment="Left" VerticalAlignment="Bottom" Margin="3" FontSize="14" Foreground="White">           
      <Hyperlink NavigateUri="{Binding StreetViewString}" RequestNavigate="Hyperlink_RequestNavigate" Foreground="White" StylusDown="Hyperlink_StylusDown" TouchDown="Hyperlink_TouchDown">
             Google
      </Hyperlink>
</TextBlock> 

代码隐藏

private void addToDiary_MouseDown(object sender, MouseButtonEventArgs e)
{
    ((sender as Button).DataContext as MyViewModel).MyCommand.Execute(null);
    e.Handled = true;
}

但我想直接将其挂接到它正在执行的命令

    private ICommand _myCommand;
    public ICommand MyCommand
    {
        get
        {
            return _myCommand
                ?? (_myCommand= CommandFactory.CreateCommand(
                () =>
                {
                    DoSomething();
                }));
        }
    }

但唯一阻止我的是我无法通过我的命令设置 e.Handled = true。不使用后面的代码是否可以做到这一点?

我假设您正在使用 MVVM,并且理想情况下您希望能够 'handle' 在 ViewModel 而不是在 View 中单击超链接 - 这是执行此操作的正确方法.

您可能最好使用普通的 WPF 按钮,该按钮的样式看起来像超链接,然后将按钮的命令 属性 绑定到 ICommand 实现的实例。

按钮的样式应如下所示:

<Style x:Key="HyperLinkButton"
       TargetType="Button">
    <Setter
        Property="Template">
        <Setter.Value>
            <ControlTemplate
                TargetType="Button">
                <TextBlock
                    TextDecorations="Underline">
                <ContentPresenter /></TextBlock>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
    <Setter
        Property="Foreground"
        Value="Blue" />
    <Style.Triggers>
        <Trigger
            Property="IsMouseOver"
            Value="true">
            <Setter
                Property="Foreground"
                Value="Red" />
        </Trigger>
    </Style.Triggers>
</Style>

应用样式并绑定命令 属性,这需要您将包含 control\view 的 DataContext 绑定到 ViewModel。正如我所说,如果你正在做 MVVM,这应该是显而易见的:

<Button Style="{StaticResource HyperLinkButton}"
        Content="Some Link"
        Command={Binding Path=MyCommand, Mode=OneWay/>