C# 如何在Xaml中的文本中包含电子邮件链接?
我在WindowsPhone8应用程序中有一些大的文本,我希望里面有电子邮件链接,比如mailto功能。 下面是代码的一部分:C# 如何在Xaml中的文本中包含电子邮件链接?,c#,xaml,windows-phone-8,windows-phone,C#,Xaml,Windows Phone 8,Windows Phone,我在WindowsPhone8应用程序中有一些大的文本,我希望里面有电子邮件链接,比如mailto功能。 下面是代码的一部分: <phone:PivotItem Header="μέλη ΔΕΠ"> <ScrollViewer> <StackPanel> <TextBlock TextWrapping="Wrap"> <Run T
<phone:PivotItem Header="μέλη ΔΕΠ">
<ScrollViewer>
<StackPanel>
<TextBlock TextWrapping="Wrap">
<Run Text="John Doe"/>
<LineBreak/>
<Run Text="503 (Building DS 126)"/>
<LineBreak/>
<Run Text="tel.: +30 210-1234567"/>
<LineBreak/>
<Run Text="e-mail: johndoe@uni.gr"/>
</TextBlock>
</StackPanel>
</ScrollViewer>
</phone:PivotItem>
我想要“电子邮件:johndoe@uni.gr“可单击并打开手机上的邮件应用程序。
我的代码中有很多这样的情况,电子邮件的文本要大得多,这就是我使用…
格式的原因
现在我知道我不能在
中使用超链接按钮,所以有什么建议吗?添加超链接按钮:
<HyperlinkButton Name="emailLink" Content="johndoe@uni.gr" Click="EmailLink_Click" />
如果您希望在UI中使用超链接,则HyperlinkButton很好,但如果您希望在一系列文本中嵌入超链接,则应将RichTextBox与超链接一起使用:
<RichTextBox TextWrapping="Wrap">
<Paragraph>
<Run Text="John Doe" />
<LineBreak />
<Run Text="503 (Building DS 126)" />
<LineBreak />
<Run Text="tel.: +30 210-1234567" />
<LineBreak />
<Hyperlink Click="Hyperlink_OnClick">e-mail: johndoe@uni.gr</Hyperlink>
</Paragraph>
</RichTextBox>
祝你好运 您还可以执行以下操作: 重载MapUri(),就像对应用程序的URI关联所做的那样,不再担心处理任何单击事件 XAML: } C# 更简单的是: XAML:
除了打开你的电子邮件应用程序,你还可以用启动器做很多事情:出于某种原因,
RoutedEventArgs
在shell:ApplicationBarMenuItem
中使用时导致错误<代码>事件参数起作用了。
<RichTextBox TextWrapping="Wrap">
<Paragraph>
<Run Text="John Doe" />
<LineBreak />
<Run Text="503 (Building DS 126)" />
<LineBreak />
<Run Text="tel.: +30 210-1234567" />
<LineBreak />
<Hyperlink Click="Hyperlink_OnClick">e-mail: johndoe@uni.gr</Hyperlink>
</Paragraph>
</RichTextBox>
private void Hyperlink_OnClick(object sender, RoutedEventArgs e) {
EmailComposeTask emailComposeTask = new EmailComposeTask();
emailComposeTask.Subject = "message subject";
emailComposeTask.Body = "message body";
emailComposeTask.To = "johndoe@uni.gr";
emailComposeTask.Show();
}
<Hyperlink NavigateUri="tel:0800-555-1234'}">call 0800-555-1234</Hyperlink>
<Hyperlink NavigateUri="mailto:you@your-domain.com'}">e-Mail you@your-domain.com</Hyperlink>
private void InitializePhoneApplication() {
//get ready for URI association
RootFrame.UriMapper = new AssociationUriMapper();
class AssociateioniMapper : UriMapperBase
{
public override Uri MapUri(Uri uri)
{
tempUri = System.Net.HttpUtility.UrlDecode(uri.ToString());
Uri retUri = uri;
//handle known uri schemes
if (uriUsesKnownScheme(uri))
{
Debug.WriteLine("Known Uri scheme: " + uri.Scheme);
NavigateConsideringKnownScheme(uri);
retUri = null;
}
}
private bool uriUsesKnownScheme(Uri uri)
{
try
{
switch (uri.Scheme)
{
case "http":
case "https":
case "mailto":
case "tel":
return true;
default:
return false;
}
}
catch (Exception)
{
//uri does not have a scheme
return false;
}
}
private void NavigateConsideringKnownScheme(Uri uri)
{
try
{
switch (uri.Scheme)
{
case schemeHttp:
case schemeHttps:
//open URI in IE
WebBrowserTask webBrowserTask = new WebBrowserTask();
webBrowserTask.Uri = uri;
webBrowserTask.Show();
break;
case schemeMailto:
//initiate eMail task
if (! string.IsNullOrWhiteSpace(uri.Query))
handleMailtoUrl_Query(uri.Query);
else
handleMailtoUrl_To(uri.OriginalString.Replace("mailto:", string.Empty));
break;
case schemeTel:
//initiate phonecall task
handleTel(uri.PathAndQuery);
break;
default:
break;
}
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message);
}
}
private void handleTel(string parameter)
{
try
{
string p = parameter as string;
string number = p;
string displayName = string.Empty;
number = Regex.Replace(number, "[^+0-9]", "");
startPhoneCall(number, displayName);
}
catch (Exception e)
{
throw e;
}
}
private void startPhoneCall(string number, string displayName)
{
try
{
PhoneCallTask phoneCallTask = new PhoneCallTask();
phoneCallTask.PhoneNumber = number;
if (!string.IsNullOrWhiteSpace(displayName))
{
phoneCallTask.DisplayName = displayName;
}
phoneCallTask.Show();
}
catch (Exception e)
{
MessageBox.Show(LocalizationHelper.GetString("ContactPhonecallError"));
}
}
private void handleMailtoUrl_Query(string query)
{
//handle subject, to, body and other parameters if required
}
private void handleMailtoUrl_To(string to)
{
try
{
EmailComposeTask emailComposeTask = new EmailComposeTask();
emailComposeTask.To = to;
emailComposeTask.Show();
}
catch (Exception e)
{
Debug.WriteLine(e.Message);
}
}
}
<HyperlinkButton Content="yourname@yourdomain.com" Click="HyperlinkButton_Click"/>
private void HyperlinkButton_Click(object sender, RoutedEventArgs e)
{
Windows.System.Launcher.LaunchUriAsync(new Uri("mailto:yourname@yourdomain.com"));
}