0

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

我想要的是一个标签或文本块,其文本是左侧的电子邮件(不需要绑定到文本框中的文本),右侧的文本框,您可以在其中键入电子邮件地址。在文本框中输入有效的电子邮件地址后,您可以单击该电子邮件地址,它将自动打开 Outlook。在 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

1 回答 1

1

我使用这种方法来发送我的电子邮件...请注意,这不是专门针对 Outlook...它将使用任何软件作为用户计算机上设置的默认电子邮件程序:

public bool SendEmail(List<string> toAddresses, List<string> ccAddresses, string fromAddress, string emailSubject, string emailBody, bool isBodyHtml)
{
    MailMessage email = new MailMessage();
    email.From = new MailAddress(fromAddress);
    foreach (string address in toAddresses) email.To.Add(new MailAddress(address));
    foreach (string address in ccAddresses) email.CC.Add(new MailAddress(address));
    email.BodyEncoding = Encoding.UTF8;
    email.IsBodyHtml = false;
    email.Subject = emailSubject;
    email.Body = emailBody;
    email.Priority = MailPriority.Low;
    SmtpClient smtpClient = new SmtpClient(Settings.Default.DefaultEmailServerPath);
    smtpClient.Credentials = new NetworkCredential(Settings.Default.EmailNetworkCredentialUserName, Settings.Default.EmailNetworkCredentialPassword, Settings.Default.EmailNetworkCredentialDomain);
    smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;
    smtpClient.Host = Settings.Default.DefaultEmailServerPath;
    smtpClient.UseDefaultCredentials = true;
    try { smtpClient.Send(email); }
    catch { return false; }
    return true;
}

请注意,我为此提供了重载方法,因此该方法包含所有选项……如果您愿意,可以自由删除几行。还有一种发送电子邮件的快捷方式:

System.Diagnostics.Process.Start("mailto:youremail@yourcompany.com");

基本上,我会在您的 UI 中添加一个HyperLink控件或一个Button具有的控件,Command然后从您的处理程序中调用此代码。您可以从 MSDN 的Hyperlink 类页面中找到有关该HyperLink控件的更多信息,并且在这篇文章中找到了一个很好的示例。

更新>>>

你真的应该提供代码示例......我不知道你是如何设置你的TextBox,你是否绑定,参数的名称等等。因此,我只能假设您必须与自己的代码相关联。

首先,在与您的相同位置添加一个Hyperlink控件:TextBox

<TextBox Grid.Row="0" Grid.Column="1" Name="EmailTextBox" Text="{Binding Email}" 
    Visibility="{Binding IsValidEmail, Converter={StaticResource 
    InverseBoolToVisibilityConverter}}" />
<TextBlock Grid.Row="0" Grid.Column="1">
    <Hyperlink RequestNavigate="Hyperlink_RequestNavigate">
        <TextBlock Text="{Binding Text, ElementName=EmailTextBox}" Visibility="{
    Binding IsValidEmail, Converter={StaticResource BoolToVisibilityConverter}}" />
    </Hyperlink>
</TextBlock>

您会看到这里的基本思想是让两个控件共享一个 UI 位置,并根据TextBox. 因此,您需要添加一个bool属性(IsValidEmail在我的示例中),当文本值是有效的电子邮件地址时将其设置为 true。然后BoolToVisibilityConverter将把该真值转换Visibility.VisibleHyperlink控件,InverseBoolToVisibilityConverter并将该假值转换为Visibility.CollapsedVisibility.Hidden用于Hyperlink控件。我希望并相信您可以自己解决剩下的问题,因为我今天的时间有限。

于 2013-08-21T10:11:25.083 回答