链接到在WPF应用程序的默认电子邮件处理程序中打开新电子邮件

本文关键字:电子邮件 程序 处理 默认 WPF 应用程序 链接 | 更新日期: 2023-09-27 17:58:01

我的目标是基本的:在WPF表单上设置一个标签/texblock,使其看起来像链接。单击时,控件应在用户的默认电子邮件应用程序中打开一个新的电子邮件合成窗口。实际打开新电子邮件窗口的代码似乎微不足道:

Process.Start("mailto:example@stackoverflow.com?subject=SubjectExample&body=BodyExample ");

然而,我遇到了两个问题:

  1. 将"打开新邮件"操作绑定到标签单击事件
  2. 设置标签的样式,使其看起来完全像默认的WPF超链接

链接到在WPF应用程序的默认电子邮件处理程序中打开新电子邮件

如果您希望样式像超链接一样,为什么不直接使用超链接呢?

<TextBlock>           
    <Hyperlink NavigateUri="mailto:example@stackoverflow.com?subject=SubjectExample&amp;body=BodyExample" RequestNavigate="OnNavigate">
        Click here
    </Hyperlink>
</TextBlock>

然后添加:

private void OnNavigate(object sender, RequestNavigateEventArgs e)
{
    Process.Start(e.Uri.AbsoluteUri);
    e.Handled = true;
}

您可以完全在XAML中执行此操作使用表达式交互调用上面提到的链接。

首先,导入以下命名空间:

xmlns:i  = "http://schemas.microsoft.com/expression/2010/interactivity"
xmlns:ei = "http://schemas.microsoft.com/expression/2010/interactions"

然后,像下面这样使用它们:

<Label Content="Send Email">
  <i:Interaction.Triggers>
    <i:EventTrigger EventName="MouseLeftButtonUp">
      <ei:LaunchUriOrFileAction Path="mailto:example@stackoverflow.com" />
    </i:EventTrigger>
  </i:Interaction.Triggers>
</Label>

任何使用.net核心的人都可以使用Reeds答案,但只需对进行一点调整

private void OnNavigate(object sender, RequestNavigateEventArgs e)
        {
            Process.Start(new ProcessStartInfo(e.Uri.AbsoluteUri) { UseShellExecute = true });
            e.Handled = true;
        }

你可以在这里看到.net核心团队谈论这是一个突破性的变化https://github.com/dotnet/runtime/issues/30303

相关文章: