Xamarin.Forms
방아쇠 및 행동
수색…
Xamarin 폼 트리거 예제
Trigger
는 응용 프로그램에 일부 UX 응답을 추가하는 쉬운 방법입니다. 한 가지 쉬운 방법은 관련 Entry
에 텍스트가 입력되었는지 여부에 따라 Label
의 TextColor
를 변경하는 Trigger
를 추가하는 것입니다.
이를 위해 Trigger
를 사용하면 Label.TextColor
가 텍스트가 입력되지 않은 경우 회색에서 사용자가 텍스트를 입력하는 즉시 검정색으로 바뀝니다.
변환기 (각 변환기에는 바인딩에 사용되는 Instance
변수가 주어 지므로 클래스의 새 인스턴스가 사용될 때마다 만들어지지 않습니다.) :
/// <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합니다 (XAML 코드를 사용하여 x:Name
의 Entry
에 알아 내기 위해 Entry.Text
3 이상 긴 문자 속성입니다.)
<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>
멀티 트리거
MultiTrigger는 자주 필요하지 않지만 매우 편리 할 때가 있습니다. MultiTrigger는 Trigger 또는 DataTrigger와 유사하게 동작하지만 여러 조건이 있습니다. 세터가 발사하려면 모든 조건이 충족되어야합니다. 다음은 간단한 예입니다.
<!-- 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>
이 예제에는 전화와 전자 메일이라는 두 가지 항목이 있으며, 그 중 하나는 채워 져야합니다. MultiTrigger는 두 필드가 모두 비어있을 때 제출 버튼을 비활성화합니다.
Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow