Xamarin.Forms
Déclencheurs et comportements
Recherche…
Exemple de déclencheur de formulaires Xamarin
Trigger
sont un moyen simple d'ajouter une certaine réactivité à votre application. Un moyen facile de le faire est d'ajouter un Trigger
qui modifie une Label
de TextColor
selon que son connexe Entry
est le texte entré dans ou non.
L'utilisation d'un Trigger
pour cela permet à Label.TextColor
de passer du gris (quand aucun texte n'est entré) au noir (dès que l'utilisateur entre du texte):
Convertisseur (chaque convertisseur reçoit une variable d' Instance
utilisée dans la liaison pour qu'une nouvelle instance de la classe ne soit pas créée à chaque utilisation):
/// <summary>
/// Used in a XAML trigger to return <c>true</c> or <c>false</c> based on the length of <c>value</c>.
/// </summary>
public class LengthTriggerConverter : Xamarin.Forms.IValueConverter {
/// <summary>
/// Used so that a new instance is not created every time this converter is used in the XAML code.
/// </summary>
public static LengthTriggerConverter Instance = new LengthTriggerConverter();
/// <summary>
/// If a `ConverterParameter` is passed in, a check to see if <c>value</c> is greater than <c>parameter</c> is made. Otherwise, a check to see if <c>value</c> is over 0 is made.
/// </summary>
/// <param name="value">The length of the text from an Entry/Label/etc.</param>
/// <param name="targetType">The Type of object/control that the text/value is coming from.</param>
/// <param name="parameter">Optional, specify what length to test against (example: for 3 Letter Name, we would choose 2, since the 3 Letter Name Entry needs to be over 2 characters), if not specified, defaults to 0.</param>
/// <param name="culture">The current culture set in the device.</param>
/// <returns><c>object</c>, which is a <c>bool</c> (<c>true</c> if <c>value</c> is greater than 0 (or is greater than the parameter), <c>false</c> if not).</returns>
public object Convert(object value, System.Type targetType, object parameter, CultureInfo culture) { return DoWork(value, parameter); }
public object ConvertBack(object value, System.Type targetType, object parameter, CultureInfo culture) { return DoWork(value, parameter); }
private static object DoWork(object value, object parameter) {
int parameterInt = 0;
if(parameter != null) { //If param was specified, convert and use it, otherwise, 0 is used
string parameterString = (string)parameter;
if(!string.IsNullOrEmpty(parameterString)) { int.TryParse(parameterString, out parameterInt); }
}
return (int)value > parameterInt;
}
}
XAML (le code XAML utilise le nom x:Name
de l' Entry
à comprendre dans la propriété Entry.Text
est long de plus de 3 caractères):
<StackLayout>
<Label Text="3 Letter Name">
<Label.Triggers>
<DataTrigger TargetType="Label"
Binding="{Binding Source={x:Reference NameEntry},
Path=Text.Length,
Converter={x:Static helpers:LengthTriggerConverter.Instance},
ConverterParameter=2}"
Value="False">
<Setter Property="TextColor"
Value="Gray"/>
</DataTrigger>
</Label.Triggers>
</Label>
<Entry x:Name="NameEntry"
Text="{Binding MealAmount}"
HorizontalOptions="StartAndExpand"/>
</StackLayout>
Multi déclencheurs
MultiTrigger n'est pas nécessaire fréquemment mais il y a certaines situations où il est très pratique. MultiTrigger se comporte de la même manière que Trigger ou DataTrigger, mais il a plusieurs conditions. Toutes les conditions doivent être remplies pour qu'un Setters tire. Voici un exemple simple:
<!-- Text field needs to be initialized in order for the trigger to work at start -->
<Entry x:Name="email" Placeholder="Email" Text="" />
<Entry x:Name="phone" Placeholder="Phone" Text="" />
<Button Text="Submit">
<Button.Triggers>
<MultiTrigger TargetType="Button">
<MultiTrigger.Conditions>
<BindingCondition Binding="{Binding Source={x:Reference email}, Path=Text.Length}" Value="0" />
<BindingCondition Binding="{Binding Source={x:Reference phone}, Path=Text.Length}" Value="0" />
</MultiTrigger.Conditions>
<Setter Property="IsEnabled" Value="False" />
</MultiTrigger>
</Button.Triggers>
</Button>
L'exemple a deux entrées différentes, téléphone et email, et l'une d'entre elles doit être remplie. Le MultiTrigger désactive le bouton de soumission lorsque les deux champs sont vides.