1

我正在开发一个 wpf 应用程序,并且我有一个客户信息部分,我可以在其中记录我的客户信息。在本节中,我使用一个记录客户电子邮件地址的文本框。但是现在我想将电子邮件地址超链接并通过 Outlook 电子邮件链接电子邮件地址,例如,如果我单击电子邮件地址,它会自动打开 Outlook 电子邮件,以便我可以通过 Outlook 发送电子邮件。谢谢。

我想要的是一个标签或文本块,其文本是左侧的电子邮件(不需要绑定到文本框中的文本),右侧的文本框可以输入电子邮件地址。在文本框中输入有效的电子邮件地址后,您可以单击该电子邮件地址,它将自动打开 Outlook。在outlook的To字段中,email地址就是你输入的。(上一题的评论太长了,所以我把它作为一个新问题,旧问题链接是链接电子邮件地址并通过outlook发送电子邮件

<TextBlock Text="Email" Grid.Row="11" x:Name="lblEmail" VerticalAlignment="Top"/> 
    <TextBox Grid.Column="1" Grid.Row="11" x:Name="txtEmail" VerticalAlignment="Top" 
        TextDecorations="UnderLine" Foreground="Blue" Text="{Binding 
        Email, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True, 
        ValidatesOnExceptions=True, NotifyOnValidationError=True}">
</TextBox> 
4

2 回答 2

4

好的,让我们再试一次...首先我们有一个TextBox用户输入电子邮件地址的地址:

<TextBox x:Name="EmailTextBox" />

然后我们有一个Hyperlink对象,其NavigateUri属性是绑定到对象Textbox.Text字段的数据EmailTextBox

<Hyperlink RequestNavigate="Hyperlink_RequestNavigate" NavigateUri="{Binding Text, 
    ElementName=EmailTextBox, UpdateSourceTrigger=PropertyChanged}">
    <TextBlock Text="Click here to e-mail" />
</Hyperlink>

然后我们有RequestNavigateEvent验证电子邮件地址的处理程序(正则表达式取自这篇文章):

public void Hyperlink_RequestNavigate(object sender, RequestNavigateEventArgs e)
{
    Hyperlink hyperlink = sender as Hyperlink;
    if (hyperlink == null) return;
    if (Regex.IsMatch(hyperlink.NavigateUri.ToString(), @"^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$"))
    {
        string address = string.Concat("mailto:", hyperlink.NavigateUri.ToString());
        try { System.Diagnostics.Process.Start(address); }
        catch { MessageBox.Show("That e-mail address is invalid.", "E-mail error"); }
    }
}

现在,我仍然无法测试任何这些,因此您可能必须自己修复一些小错误,但这大致是您必须做的。随意添加评论,但这次不要让评论部分大于问题部分。;)

更新>>>

好的,所以问题是hyperlink.NavigateUri事实上是一个Uri对象而不是一个string所以我们需要调用ToString()它。

以防万一您需要它,您可以用此行替换Hyperlink_RequestNavigate处理程序中的行来设置电子邮件的主题:

string address = string.Concat("mailto:", hyperlink.NavigateUri.ToString(), 
"?subject=This is the subject");

这可以进一步扩展以添加部分(或全部)主体:

string address = string.Concat("mailto:", hyperlink.NavigateUri.ToString(), 
"?subject=This is the subject&body=Dear Sir/Madam,");
于 2013-08-22T12:44:05.860 回答
0

你可以试试代码 XAML

<TextBlock Name="tbReferAFriend"  MouseDown="tbReferAFriend_MouseDown">Refer a friend</TextBlock>

后面的代码

 private void tbReferAFriend_MouseDown(object sender, MouseButtonEventArgs e)
            {
                try
                {

                   LaunchEmailClientByShellExecute();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message + Environment.NewLine + ex.StackTrace);
                }
            }

    [DllImport("shell32.dll")]
            public static extern IntPtr ShellExecute(IntPtr hwnd, string lpOperation,
                string lpFile, string lpParameters, string lpDirectory, int nShowCmd);

            private void launchEmailClientByShellExecute()
            {
                ShellExecute(IntPtr.Zero, "open", "mailto:username?subject=Read%20This&body=message%20contents", "", "", 4/* sw_shownoactivate */);
            }

来自:https://social.msdn.microsoft.com/Forums/vstudio/en-US/dcbaaced-97b3-4276-bf95-960e77cb6c03/how-to-launch-default-mail-client-in-wpf-applications?论坛=wpf

于 2015-03-05T16:41:45.450 回答