Как изменить текст метки, когда элемент управления Entry IsFocused становится истинным с помощью триггера в Xamarin.Forms? - PullRequest
1 голос
/ 09 марта 2020

Я хочу создать триггер для элемента управления Entry, который изменит текст элемента управления Label, когда элемент управления Entry получит фокус, и снова изменит текст метки на стандартный, если элемент управления Entry потеряет фокус.

I Я выполнил приведенный ниже код, но это изменяет текст метки, когда текст вводится в элемент управления Entry, но я хочу изменить его, когда элемент управления Entry получает фокус, а не изменение текста.

<Label
    x:Name="HeaderText"
    Text="Lets start here">
    <Label.Triggers>
        <MultiTrigger TargetType="Label">
            <MultiTrigger.Conditions>
                <BindingCondition Binding="{Binding Source={x:Reference TextEntry},
                        Path=Text.Length,
                        Converter={StaticResource dataHasBeenEntered}}"
                        Value="true" />
            </MultiTrigger.Conditions>
            <Setter Property="Text" Value="Enter Name" />
        </MultiTrigger>
    </Label.Triggers>
</Label>

MultiTriggerConverter

public class MultiTriggerConverter : IValueConverter
{
    public object Convert(object value, Type targetType,
    object parameter, CultureInfo culture)
    {
        if ((int)value > 0) // length > 0 ?
            return true;            // some data has been entered
        else
            return false;            // input is empty
    }

    public object ConvertBack(object value, Type targetType,
        object parameter, CultureInfo culture)
    {
        throw new NotSupportedException();
    }
}

1 Ответ

1 голос
/ 10 марта 2020

вы можете просто использовать свойство IsFocused, например:

<StackLayout>
    <Entry x:Name="TextEntry" />
    <!-- Place new controls here -->
    <Label x:Name="HeaderText" Text="Lets start here">
        <Label.Triggers>
            <DataTrigger TargetType="Label" 
                         Binding="{Binding Source={x:Reference TextEntry},
                         Path=IsFocused}"
                         Value="true">
                <Setter Property="Text" Value="Enter Name" />
            </DataTrigger>
        </Label.Triggers>
    </Label>
</StackLayout>

Более того, вы также можете использовать заполнитель, чтобы указать, что пользователю нужно поместить:

<Entry x:Name="TextEntry" Placeholder="Enter Name"/>

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...