Suche…


Xamarin Forms Trigger Beispiel

Trigger sind eine einfache Möglichkeit, Ihrer Anwendung etwas UX-Reaktionsfähigkeit zu verleihen. Ein einfacher Weg, dies zu tun, ist das Hinzufügen eines Trigger die TextColor eines Label TextColor , je nachdem, ob in den zugehörigen Entry Text eingegeben wurde.

Bei Verwendung eines Trigger kann Label.TextColor von grau (wenn kein Text eingegeben wird) in schwarz (sobald der Benutzer Text eingibt) ändern:

Wandler (jeder Wandler ein gegebene Instance - Variable , die in der Bindung verwendet wird , so dass eine neue Instanz der Klasse , die nicht jedes Mal erstellt wird es verwendet wird):

/// <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 (der XAML - Code verwendet die x:Name des Entry im herauszufinden Entry.Text Eigenschaft ist mehr als 3 Zeichen lang sein .):

<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-Trigger

MultiTrigger wird nicht häufig benötigt, aber es gibt Situationen, in denen es sehr praktisch ist. MultiTrigger verhält sich ähnlich wie Trigger oder DataTrigger, hat jedoch mehrere Bedingungen. Alle Bedingungen müssen erfüllt sein, damit ein Setter feuern kann. Hier ist ein einfaches Beispiel:

<!-- 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>

Das Beispiel enthält zwei verschiedene Einträge, Telefon und E-Mail, und einer davon muss ausgefüllt werden. Der MultiTrigger deaktiviert die Schaltfläche zum Senden, wenn beide Felder leer sind.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow