所以我有一个超链接,我已经连接到背后的代码,如下所示:
的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
。是否可以在不使用背后的代码的情况下执行此操作?
答案 0 :(得分:0)
我假设你正在使用MVVM,理想情况下你希望能够“处理”ViewModel中超链接的点击而不是View中的 - 这是正确的方法。
你可能最好使用一个普通的WPF按钮,它被设计成看起来像一个超链接,然后在按钮的Command属性中绑定到你的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>
应用Style并绑定Command属性,这要求您将包含控件\视图的DataContext绑定到ViewModel。正如我所说,如果你在做MVVM,这应该是显而易见的:
<Button Style="{StaticResource HyperLinkButton}"
Content="Some Link"
Command={Binding Path=MyCommand, Mode=OneWay/>