好吧,让我们再试一次...首先我们有一个TextBox
用户输入电子邮件地址:
<TextBox x:Name="EmailTextBox" />
然后我们有一个Hyperlink
其对象NavigateUri
属性是绑定到的数据Textbox.Text
领域的EmailTextBox
object:
<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()
on it.
以防万一您需要它,您可以更换您的线路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,");