Je veux créer une étiquette avec possibilité de clic, comme dans WIN phone xaml
<HyperlinkButton Content="My Text to click"/>
Existe-t-il une possibilité de le faire dans Xamarin.Forms?
J'ai trouvé ça mais ce n'est pas la même chose:
https://github.com/XLabs/Xamarin-Forms-Labs/wiki/HyperLinkLabel
Je suggérerais d'utiliser GestureRecognizers
et d'ajouter un Tap Gesture
à une étiquette. Ref: ici
var label = new Label()
{
Text="My Hyperlink"
};
var tapGestureRecognizer = new TapGestureRecognizer();
tapGestureRecognizer.Tapped += (s, e) => {
// handle the tap
};
label.GestureRecognizers.Add(tapGestureRecognizer);
GestureRecognizer
est une propriété publique de la classe View
dont Label
hérite. Voir ici
Je prendrais une approche beaucoup plus standard et utiliserais une Button
. Il suffit de définir l’arrière-plan en fonction de l’arrière-plan de votre application et de supprimer la bordure. Il n'y a alors pas besoin de code TapGestureRecongniser
supplémentaire. (Pseudo Code ci-dessous :)
Xaml:
<Button Text="Click Me!" Background= "YourAppBackground" BorderWidth="0" Clicked="OnButtonClicked" />
Code-Derrière:
void OnButtonClicked(object sender, EventArgs args)
{
//Open your link in here
}
Le code XAML serait le suivant:
<Label
Text="My Text to click"
HorizontalOptions="Center" >
<Label.GestureRecognizers>
<TapGestureRecognizer
Tapped="OnLabelTapped"
NumberOfTapsRequired="2" />
</Label.GestureRecognizers>
</Label>
Remarque: Par défaut, NumberOfTapsRequired
est 1.
Ensuite, dans votre fichier .cs
, ajoutez la méthode OnLabelTapped
.
public void OnLabelTapped(object sender, EventArgs args)
{
// Your code here
// Example:
// DisplayAlert("Message", "You clicked on the label", "OK");
}
Oui, vous pouvez utiliser Button Clicked ou TapGestureRecognizer. Si vous souhaitez rediriger vers un site, vous pouvez utiliser WebView. Si vous souhaitez accéder directement à votre propre page native: Si vous utilisez NavigationPage, vous pouvez utiliser Navigation.PushAsync (nouvelle page ()); Si vous n’utilisez pas NavigationPage et souhaitez modifier la page principale:. App.Current.MainPage = new MyContentPage ();
Je fais ceci -> crée la classe suivante:
public class ButtonAsLink : Button
{
public ButtonAsLink()
{
this.TextColor = Color.Blue;
this.BackgroundColor = Color.Transparent;
this.BorderWidth = 0;
}
}
Ensuite, partout où vous devez créer un bouton de lien, utilisez ceci:
SendButton = new ButtonAsLink()
{
Text = "Send Logs...",
VerticalOptions = LayoutOptions.Center
};
C'est une classe que j'utilise pour qu'une étiquette agisse comme un lien:
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)) });
}
}
Pour plus d'options, cette réponse à propos de la création d'un lien hypertexte dans Xamarin Forms peut être utile.
Si vous voulez un bouton élégant (faites-le comme un lien hypertexte - avec soulignement), vous souhaitez implémenter le rendu personnalisé:
Ajoutez ceci à xamarin.project
using Xamarin.Forms;
namespace xamarin.Mobile.Controls
{
public class HyperlinkButton : Button
{
public HyperlinkButton()
{
}
}
}
Et implémentez le rendu au projet 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);
}
}
}
}
J'ai ajouté le moteur de rendu pour iOS uniquement. Si vous souhaitez prendre en charge d'autres versions, vous devez ajouter des moteurs de rendu à cette plate-forme.
Et utilisez-le à xcml comme ceci:
<ContentPage ...
xmlns:control="clr-namespace:xamarin.Mobile.Controls">
<control:HyperlinkButton Text="Cancel" Clicked="CancelClicked"/>
</ContentPage>