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
我会采用更标准的方法并使用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);
GestureRecognizer
是Label
继承自的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");
}