Подтвердить что ты не робот

Создайте гиперссылку с помощью Xamarin.Forms(xaml и С#)

Я относительно неопытный профессиональный программист (мне всего 20 лет). Поэтому я заранее извиняюсь, так как могут быть некоторые более крупные концепции, которые я пока не полностью понимаю. Надеюсь, это подходящий вопрос, потому что час работы в поисковых системах не мог мне помочь.

В основном я хочу создать гиперссылку в Xamarin.Forms, используя класс label. В принципе, я хочу использовать следующую ссылку, чтобы отправить пользователя на google.com в веб-браузере:

<Label Text="http://www.google.com/" />

Я не могу найти что-либо в API Xamarin Forms об этом, и в Интернете есть неопределенная и ограниченная информация по этой теме в Xamarin.Forms.

Возможно ли это? Если да, может кто-нибудь, пожалуйста, назовите меня в правильном направлении? Спасибо заранее любому, кто отвечает.

4b9b3361

Ответ 1

Вы не можете этого сделать, потому что ярлыки по умолчанию не отвечают на ввод пользователя, но вы можете добиться чего-то подобного с жестами

Label label = new Label();
label.Text = "http://www.google.com/";

var tapGestureRecognizer = new TapGestureRecognizer();
tapGestureRecognizer.Tapped += (s, e) => {
    Device.OpenUri( new Uri((Label)s).Text);
};
label.GestureRecognizers.Add(tapGestureRecognizer);

Ответ 2

Я сделал этот маленький класс для обработки:

public class SimpleLinkLabel : Label
{
    public SimpleLinkLabel(Uri uri, string labelText = null)
    {
        Text = labelText ?? uri.ToString();
        TextColor = Color.Blue;
        GestureRecognizers.Add(new TapGestureRecognizer { Command = new Command(() => Device.OpenUri(uri)) });
    }
}

И немного больше, если вы хотите подчеркнуть это:

public class LinkLabel : StackLayout
{
    private SimpleLinkLabel label;

    public LinkLabel(Uri uri, string labelText = null, bool underlined = true)
    {
        // Remove bottom padding
        Padding = new Thickness(Padding.Left, Padding.Top, Padding.Right, 0);
        VerticalOptions = LayoutOptions.Center;

        Children.Add(label = new SimpleLinkLabel(uri, labelText));

        if (underlined)
            Children.Add(new BoxView { BackgroundColor = Color.Blue, HeightRequest = 1, Margin = new Thickness(0, -8, 0, 0) });
    }

    public TextAlignment HorizontalTextAlignment { get { return label.HorizontalTextAlignment; } set { label.HorizontalTextAlignment = value; } }
}

Последний класс, вдохновленный этим сообщением: как подчеркнуть в форматах xamarin


Изменить: у XLabs есть HyperLinkLabel.