texto style cajas botones c# xaml xamarin xamarin.forms

c# - style - texto en xamarin



Cambiar el color de la etiqueta de formularios de Xamarin solo en C#, no en XAML (3)

Tengo este código XAML:

<StackLayout Grid.Row="0" Grid.Column="0" Padding="15,10,20,10" HorizontalOptions="StartAndExpand" VerticalOptions="CenterAndExpand"> <StackLayout.GestureRecognizers> <TapGestureRecognizer Tapped="tapFavorites" NumberOfTapsRequired="1" /> </StackLayout.GestureRecognizers> <Label x:Name="faveLabel" FontFamily="FontAwesome" XAlign="Center" FontSize="23"> <Label.Triggers> <DataTrigger TargetType="Label" Binding="{Binding Favorite}" Value="true"> <Setter Property="TextColor" Value="Red" /> </DataTrigger> <DataTrigger TargetType="Label" Binding="{Binding Favorite}" Value="false"> <Setter Property="TextColor" Value="Gray" /> </DataTrigger> </Label.Triggers> </Label> </StackLayout>

En mi código de C # estoy familiarizado con la configuración de la propiedad de texto de la etiqueta simplemente especificando de esta manera:

sampleLabel.Text = "ABC"

Pero esta situación es diferente. ¿Puede alguien decirme cómo puedo cambiar el color de una etiqueta desde C # cuando se hace clic en la etiqueta?


¿Qué tal esto?

Pagina principal:

public partial class MainPage : ContentPage { MyViewModel vm; public MainPage() { InitializeComponent(); vm = new MyViewModel(); BindingContext = vm; var faveLabel = new Label { FontSize = 24, FontFamily = "FontAwesome", Text = "Tap Here !" }; var trigger1 = new DataTrigger(typeof(Label)); trigger1.Binding = new Binding("Favorite", BindingMode.TwoWay); trigger1.Value = true; trigger1.Setters.Add(new Setter { Property = Label.TextColorProperty, Value = Color.Red }); var trigger2 = new DataTrigger(typeof(Label)); trigger2.Binding = new Binding("Favorite", BindingMode.TwoWay); trigger2.Value = false; trigger2.Setters.Add(new Setter { Property = Label.TextColorProperty, Value = Color.Gray }); faveLabel.Triggers.Add(trigger1); faveLabel.Triggers.Add(trigger2); var sl = new StackLayout { HorizontalOptions = LayoutOptions.StartAndExpand, VerticalOptions = LayoutOptions.CenterAndExpand }; var tgr = new TapGestureRecognizer(); tgr.NumberOfTapsRequired = 1; tgr.Tapped += tapFavorites; sl.GestureRecognizers.Add(tgr); sl.Children.Add(faveLabel); Content = sl; } public void tapFavorites(object sender, EventArgs e) { vm.Favorite = !vm.Favorite; } }

ViewModel:

public class MyViewModel : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; private bool favorite; public bool Favorite { get { return favorite; } set { if (value != favorite) { favorite = value; NotifyPropertyChanged(); } } } private void NotifyPropertyChanged([CallerMemberName] String propertyName = "") { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } }


Puede acceder a su faveLabel a través de su nombre y un GestureRecognizer. Allí establece el TextColor de su etiqueta en una diferente. En lugar de escribir el código después de la función de flecha, también puede proporcionar una función.

faveLabel.GestureRecognizers.Add( new TapGestureRecognizer { Command = new Command( () => faveLabel.TextColor = Color.Red ) });

En lugar de escribir el código completo después de la función de flecha, también puede proporcionar una función.

... { Command = new Command(() => OnLabelClicked() ) }

Aquí está el enlace a la documentación oficial de Xamarin para el (Tap) GestureRecognizers.


Si haces cosas en xaml, entonces desencadena es el camino a seguir, pero si lo haces en código, puedes hacerlo de cualquier manera, con o sin desencadenantes

Puede mantener el color del texto favorito y / o etiqueta en el modelo y hacer vinculante o no. Si tiene modelo, también puede vincular TapFavorites como Marimba mostró

public partial class MainPage : ContentPage { Label faveLabel; bool favorite = false; public MainPage() { InitializeComponent(); faveLabel = new Label { FontSize = 24, FontFamily = "FontAwesome", Text = "Tap Here !" }; var sl = new StackLayout { HorizontalOptions = LayoutOptions.StartAndExpand, VerticalOptions = LayoutOptions.CenterAndExpand }; var tgr = new TapGestureRecognizer(); tgr.NumberOfTapsRequired = 1; tgr.Tapped += tapFavorites; sl.GestureRecognizers.Add(tgr); sl.Children.Add(faveLabel); Content = sl; } public void tapFavorites(object sender, EventArgs e) { favorite = ! favorite; faveLabel.TextColor = favorite ? Color.Red : Color.Gray; } }