HyperlinkButton in C# XAMARIN.FORMS

本文关键字:FORMS XAMARIN in HyperlinkButton | 更新日期: 2023-09-27 18:29:52

我想创建具有点击可能性的标签,就像在WIN手机xaml 中一样

<HyperlinkButton Content="My Text to click"/>

有可能用Xamarin.Forms来做吗?

我发现了这个,但不一样:

https://github.com/XLabs/Xamarin-Forms-Labs/wiki/HyperLinkLabel

HyperlinkButton in C# XAMARIN.FORMS

我会采用更标准的方法并使用Button。只需将背景设置为与应用程序背景匹配,然后删除边框即可。那么就不需要额外的TapGestureRecongniser代码了。(下面的伪代码:)

Xaml:

<Button Text="Click Me!" Background= "YourAppBackground" BorderWidth="0" Clicked="OnButtonClicked" />

代码背后:

void OnButtonClicked(object sender, EventArgs args)
{
    //Open your link in here
}

我建议使用GestureRecognizers并在标签中添加一个Tap Gesture。参考:此处

var label = new Label()
{
  Text="My Hyperlink"
};
var tapGestureRecognizer = new TapGestureRecognizer();
tapGestureRecognizer.Tapped += (s, e) => {
    // handle the tap
};
label.GestureRecognizers.Add(tapGestureRecognizer);

GestureRecognizerLabel继承自的View类上的公共属性。请参阅此处

XAML代码如下:

<Label
    Text="My Text to click"
    HorizontalOptions="Center" >
    <Label.GestureRecognizers>
        <TapGestureRecognizer
            Tapped="OnLabelTapped"
            NumberOfTapsRequired="2" />
    </Label.GestureRecognizers>
</Label>

注意:默认情况下,NumberOfTapsRequired为1。

然后在.cs文件中,添加方法OnLabelTapped

public void OnLabelTapped(object sender, EventArgs args)
{
    // Your code here
    // Example:
    // DisplayAlert("Message", "You clicked on the label", "OK");
}

是的,您可以使用Button Clicked或TapGestureRecognizer。如果要重定向到某个网站,可以使用WebView。如果您想直接指向自己的Native页面:如果您正在使用NavigationPage,则可以使用Navigation.PushAsync(new Page());如果您不使用NavigationPage,并且希望更改MainPage:App.Current.MainPage=新建MyContentPage();

这是一个我用来让标签充当链接的类:

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

对于更多选项,这个关于在Xamarin Forms中创建超链接的答案可能很有用。

我这样做-->创建以下类:

public class ButtonAsLink : Button
{
    public ButtonAsLink()
    {
        this.TextColor = Color.Blue;
        this.BackgroundColor = Color.Transparent;
        this.BorderWidth = 0;
    }
}

然后在任何你需要创建链接按钮的地方使用这个:

SendButton = new ButtonAsLink()
        {
            Text = "Send Logs...",
            VerticalOptions = LayoutOptions.Center
        };

如果你想使按钮时尚(使其像带下划线的超链接),你想实现自定义渲染器:

将此添加到xamarin.project

using Xamarin.Forms;
namespace xamarin.Mobile.Controls
{
    public class HyperlinkButton : Button
    {
        public HyperlinkButton()
        {
        }
    }
}

并实现IOS项目的渲染器:

using System.ComponentModel;
using xamarin.Mobile.IOS;
using Foundation;
using UIKit;
using Xamarin.Forms;
using Xamarin.Forms.Platform.iOS;
[assembly: ExportRenderer(typeof(xamarin.Mobile.Controls.HyperlinkButton), typeof(HyperlinkButtonRenderer))]
namespace xamarin.Mobile.IOS
{
    public class HyperlinkButtonRenderer : ButtonRenderer
    {
        protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
        {
            base.OnElementPropertyChanged(sender, e);
            if (Control != null)
            {
                //Set attribute for underlineing information links
                var underlineAttr = new UIStringAttributes { UnderlineStyle = NSUnderlineStyle.Single };
                Control.SetAttributedTitle(new NSAttributedString(Control.CurrentTitle, underlineAttr), UIControlState.Normal);
            }
        }
    }
}

我只为iOS添加了渲染器。如果你想支持另一个版本,你必须向这个平台添加渲染器。

并在xcml中使用它,如下所示:

<ContentPage ...
xmlns:control="clr-namespace:xamarin.Mobile.Controls">
<control:HyperlinkButton Text="Cancel" Clicked="CancelClicked"/>
</ContentPage>

用打开浏览器链接的实际代码更新KidCode答案

Xaml视图:

<Button Text="Go Google" Clicked="GoGoogle" />

代码背后:

    void GoGoogle(object sender, EventArgs args)
    {
       Browser.OpenAsync("https://www.google.com");
    }