美好的一天,
我正在尝试实现一个WPF超链接,它将使用电子邮件地址打开默认的mailclient。多数民众赞成。
现在我浏览了很多例子,但每个例子几乎都使用了一个传递给命令的事件或参数。有没有其他方法可以实现这一目标。电子邮件地址有限?牢记MVVM原则。这就是我所熟悉的:
<TextBlock Grid.Column="3" HorizontalAlignment="Left" VerticalAlignment="Center">
<Hyperlink NavigateUri="mailto:someone@someone.com">
<Run Text="{Binding Email}" />
</Hyperlink>
</TextBlock>
答案 0 :(得分:2)
您可以尝试使用转换器,如下所示
<TextBlock Grid.Column="3"
HorizontalAlignment="Left"
VerticalAlignment="Center">
<TextBlock.Resources>
<local:StringToMailToConverer x:Key="StringToMailToConverer" />
</TextBlock.Resources>
<Hyperlink NavigateUri="{Binding Email, Converter={StaticResource StringToMailToConverer}}">
<Run Text="{Binding Email}" />
</Hyperlink>
</TextBlock>
转换器,
public class StringToMailToConverer : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if(value != null)
{
if (!string.IsNullOrEmpty(value.ToString()))
{
return "mailto:" + value.ToString();
}
}
return string.Empty;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
<强>更新强> 在这种情况下,您可以使用简单的行为
<TextBlock xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
Grid.Column="3"
HorizontalAlignment="Left"
VerticalAlignment="Center">
<Hyperlink NavigateUri="{Binding Email}">
<i:Interaction.Behaviors>
<local:MailToBehaviour />
</i:Interaction.Behaviors>
<Run Text="{Binding Email}" />
</Hyperlink>
</TextBlock>
public class MailToBehaviour : Behavior<Hyperlink>
{
protected override void OnAttached()
{
base.OnAttached();
AssociatedObject.RequestNavigate += (_, __) =>
{
Process.Start("mailto:" + __.Uri);
__.Handled = true;
};
}
}
您需要引用System.Windows.Interactivity程序集