【问题标题】:Inline Hyperlink navigate to Page内联超链接导航到页面
【发布时间】:2018-03-17 12:35:02
【问题描述】:

我正在构建文本,一些文本应该包含超链接。但是,这些超链接不会重定向到网页,而是应该在 UWP 应用(当前运行的 UWP 应用,而不是它的新实例或其他应用)中打开一个页面。

HyperlinkButton 只能打开指向外部浏览器的 URL,无法打开应用内的页面。

使用InlineUIContainer 不起作用,我明白了

抛出异常:mscorlib.ni.dll 中的“System.ArgumentException” 附加信息:值不在预期范围内。

使用此代码

List<Inline> ic = new List<Inline>();
InlineUIContainer container = new InlineUIContainer();
TextBlock tbClickable = new TextBlock();
tbClickable.Foreground = new SolidColorBrush(Colors.Red);
tbClickable.Text = label?.name;
tbClickable.Tag = label?.id;
tbClickable.Tapped += TbArtist_Tapped;
container.Child = tbClickable;
ic.Add(container);

当我使用时

foreach (var item in ic)
{
    dTb.Inlines.Add(item);
}

其中tbCurrentTextBlock

还有其他方法可以将可点击链接作为内联元素吗? 最好的情况我可以附加一个Tapped/Click 事件处理程序。 但是通过URI方式打开页面也不错。

【问题讨论】:

  • HyperlinkButton 的文档告诉你 how to do this
  • @PeterTorr-MSFT 问题是 TextBlock 不接受 InlineUIContainer,因此我无法添加 HyperlinkBut​​ton,因为它需要在 InlineUIContainer 中。 HyperlinkBut​​ton 本身不是内联元素。
  • @PeterTorr-MSFT 这不起作用,因为它只接受将在应用程序外部打开的 URI。如文档中所述:“当用户单击或点击超链接元素时,指定的统一资源标识符 (URI) 在默认浏览器中打开。默认浏览器在与您的应用程序不同的进程中运行。”。但是,我设法让它在带有 HyperlinkBut​​ton 的 RichTextBlock 中工作。清理完代码后,我将发布答案。
  • 您阅读下一段了吗? “将 Click 事件用于在浏览器中启动统一资源标识符 (URI) 以外的操作,例如在应用程序内导航。”

标签: c# xaml hyperlink uwp inline


【解决方案1】:

我更改为 RichTextBlock 并使用 Blocks 我可以添加一个可点击的 TextBlock。 这适用于 UWP。

List<Block> ic = new List<Block>();
Paragraph para = new Paragraph();
InlineUIContainer iuic = new InlineUIContainer();
TextBlock hpb = new TextBlock();
hpb.Text = "link text";
hpb.Tag = "some tag to pass on to the click handler";
hpb.Tapped += ClickHandler;
hpb.TextDecorations = TextDecorations.Underline;
hpb.Foreground = new SolidColorBrush((Windows.UI.Color)page.Resources["SystemAccentColor"]);
iuic.Child = hpb;

para.Inlines.Add(iuic);
ic.Add(para);

【讨论】:

  • 嘿@Co​​CaIceDew,这是我的意图,但 StackOverflow 让我再等一个小时才能这样做 :)
【解决方案2】:

您没有理由不能为此使用HyperlinkButton。快速示例:

<HyperlinkButton Click="HyperlinkButton_Click" Content="Click me" />

还有Click 处理程序:

private void HyperlinkButton_Click(object sender, RoutedEventArgs e)
{
    Frame.Navigate(typeof(MainPage));
}

【讨论】:

  • 问题是 TextBlock 不接受 InlineUIContainer,因此我无法添加 HyperlinkBut​​ton,因为它需要在 InlineUIContainer 中。 HyperlinkBut​​ton 本身不是内联元素。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-05
  • 2016-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多