Как перемещаться по приложению в текстовом клике по гиперссылке? - PullRequest
0 голосов
/ 14 января 2020

У меня есть текст, привязанный к метке, содержит <a>Click here</a> тег привязки. Текст Нажмите здесь отображается как гиперссылка. Я хочу перейти на страницу в приложении при нажатии на гиперссылку.

Как это сделать?

Я пытался реализовать пользовательский Label рендер, но не смог достичь своей цели .

Ответы [ 2 ]

1 голос
/ 14 января 2020
  1. Я думаю, вы могли бы использовать TapGestureRecognizer и удалить тег привязки, преобразовав связанный текст, это может быть намного проще при использовании пользовательского представления. Добавьте привязываемое свойство для текста ссылки и другое для команды навигации.

CustomView.Xaml

<ContentView.Content>
    <Label x:Name="linkTextLabel"/>
</ContentView.Content>

CustomView.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 могла бы быть немного больше работы для навигации внутри приложения.

0 голосов
/ 14 января 2020

Если вы хотите открыть страницу форм Xamarin из html, вам нужно использовать javascript инъекцию. Вы можете найти хорошую документацию и образец в здесь .

...