C# 如何在Xaml中的文本中包含电子邮件链接?

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

我在WindowsPhone8应用程序中有一些大的文本,我希望里面有电子邮件链接,比如mailto功能。 下面是代码的一部分:

<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"));
}