C#XAMARIN.FORMS中的HyperlinkBut​​ton

时间:2016-01-12 09:21:09

标签: c# xaml xamarin.forms

我想在WIN手机xaml中创建带有点击可能性的标签

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

是否有可能在Xamarin.Forms中执行此操作?

我发现了这一点但不一样:

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

7 个答案:

答案 0 :(得分:15)

我采用更标准的方法并使用Button。只需设置背景以匹配您的应用背景并删除边框。然后就不需要额外的TapGestureRecongniser代码了。 (下面的伪代码:)

的Xaml:

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

代码隐藏:

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

答案 1 :(得分:13)

我建议您使用GestureRecognizers并在标签上添加Tap GestureRef: here

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

GestureRecognizerView类的公共属性,Label继承自该属性。见here

答案 2 :(得分:1)

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");
}

答案 3 :(得分:0)

是的,您可以使用Button Clicked或TapGestureRecognizer。 如果要重定向到站点,可以使用WebView。 如果您想直接进入您自己的Native页面: 如果您使用的是NavigationPage,则可以使用     Navigation.PushAsync(new Page()); 如果您不使用NavigationPage并想要更改MainPage:     App.Current.MainPage = new MyContentPage();

答案 4 :(得分:0)

这是我用来将标签作为链接的类:

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)) });
    }
}

有关更多选项,有关creating a hyperlink in Xamarin Forms的答案可能会有用。

答案 5 :(得分:0)

我这样做 - &gt;创建以下类:

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
        };

答案 6 :(得分:0)

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

将此添加到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>