xamarin - 如何在超链接文本点击中在应用程序内导航?
问题描述
我有一个绑定到标签的文本,其中包含一个<a>Click here</a>
锚标记。文本单击此处显示为超链接。单击超链接时,我想导航到应用程序内的页面。
这个怎么做?
我尝试实现自定义Label
渲染器,但无法完全实现我的目标。
解决方案
- 我认为您可以使用 a
TapGestureRecognizer
并通过转换绑定文本来删除锚标记,使用自定义视图可能会简单得多。为链接文本添加一个可绑定属性,为导航命令添加另一个属性。
自定义视图.Xaml
<ContentView.Content>
<Label x:Name="linkTextLabel"/>
</ContentView.Content>
自定义视图.Xaml.cs
public string TextWithlink
{
get { return (string)GetValue(TextWithlinkProperty); }
set
{
SetValue(TextWithlinkProperty, value);
}
}
public static readonly BindableProperty TextWithlinkProperty = BindableProperty.Create("TextWithlink", typeof(string), typeof(LinkText), "", BindingMode.Default, propertyChanged: OnTextLinkChanged);
public Command NavigationCommand
{
get { return (Command)GetValue(NavigationCommandProperty); }
set
{
SetValue(NavigationCommandProperty, value);
}
}
public static readonly BindableProperty NavigationCommandProperty = BindableProperty.Create("NavigationCommand", typeof(Command), typeof(LinkText), null, BindingMode.Default, propertyChanged: OnNavigationCommandChanged);
private static void OnNavigationCommandChanged(BindableObject bindable, object oldvalue, object newValue)
{
(bindable as LinkText).ChangeCommand();
}
private static void OnTextLinkChanged(BindableObject bindable, object oldvalue, object newValue)
{
(bindable as LinkText).Changetext();
}
private void ChangeCommand()
{
linkTapGesture = new TapGestureRecognizer();
linkTapGesture.Command = this.NavigationCommand;
linkSpan.GestureRecognizers.Clear();
linkSpan.GestureRecognizers.Add(linkTapGesture);
}
private void Changetext()
{
FormattedString formattedString = new FormattedString();
/// String formatting code, change according to your need
string[] subStrings = this.TextWithlink.Split('<');
Span textSpan = new Span()
{
Text = subStrings[0] + " "
};
string linkString = subStrings[1].Split('>')[1];
linkSpan = new Span()
{
Text = linkString,
};
///
formattedString.Spans.Add(textSpan);
formattedString.Spans.Add(linkSpan);
this.linkTextLabel.FormattedText = formattedString;
}
用法.Xaml
<local:LinkText
TextWithlink="{Binding TextWithLink}" NavigationCommand="{Binding NavigationCommand}"/>
- 但是,如果您希望通过超链接导航应用程序。由于链接重定向由移动操作系统处理,因此请考虑自定义 uri 重定向。这个博客可能会对你有所帮助。
对于 Android,深层链接
对于 iOS,自定义 URI
恕我直言,URI 导航对于应用程序内的导航可能需要更多的工作。
推荐阅读
- javascript - 如何在 javascript 文件中使用 require
- android - 使用开放的街道地图为 MapView 设置 onclicklistener
- c# - 使用 Push SDK 将用户添加到 ZKTeco 门禁
- performance - 一致的哈希和粘性会话有什么区别?
- javascript - jQuery ajax 我需要将数据库表单中的布尔值从 true 更改为 false
- interface - 什么是 Franca IDL 生态系统
- c - 循环直到用户输入'x'
- json - 我在 3d 场景中加载 3d 对象(json 文件)时遇到问题
- r - R - 根据 ID 向量中包含的文本合并两个数据帧
- javascript - 允许导入的 Webpack 配置