我正在开发一个wpf应用程序,我有一个客户信息部分,我可以记录我的客户信息。在本节中,我使用文本框记录客户的电子邮件地址。但现在我想制作电子邮件地址超链接并通过Outlook电子邮件链接电子邮件地址,例如,如果我点击电子邮件地址,它会自动打开Outlook电子邮件,以便我可以通过outlook发送电子邮件。感谢。
我想要的是标签或文本块,其左侧是文本电子邮件(不需要绑定到文本框中的文本),右侧是可以键入电子邮件的文本框地址。在文本框中键入有效的电子邮件地址后,您可以单击电子邮件地址,它将自动打开Outlook。在Outlook的到字段中,电子邮件地址就是您输入的内容。(上一个问题中的评论很长,因此我将其作为一个新问题,旧问题链接为{{3} }
<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>
答案 0 :(得分: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
处理程序来验证电子邮件地址(正则表达式取自this post):
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"); }
}
}
现在,我仍然无法测试任何这些,所以你可能必须自己修复一些小错误,但这是你必须做的大致。随意添加评论,但这次不要让评论部分大于问题部分。 ;)
更新&gt;&gt;&gt;
好的,问题是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,");
答案 1 :(得分: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 */);
}