2017-09-08 7 views
0

私はXAMLにユーザ名とパスワードの2つの入力フィールドを作成しました。xamarinを使用して、文字列のいずれかがパスワードフィールドから削除された場合のエラーメッセージの表示方法を教えてください。

たとえば、パスワードフィールドに[email protected]のようなパスワードを指定しています。パスワードフィールドから(@、A、1)のような文字列を削除すると、エラーがラベルに表示されます。ここで

<?xml version="1.0" encoding="utf-8" ?> 
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" 
      xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
      xmlns:local="clr-namespace:LoginUser" 
      x:Class="LoginUser.MainPage"> 
    <StackLayout Spacing="20" Padding="50" VerticalOptions="Center"> 
    <Entry x:Name="txtUsername" Placeholder="Username"></Entry> 
    <Entry x:Name="txtPassword" Placeholder="Password" IsPassword="True"> 
     <Entry.Behaviors> 
     <local:ValidationBehavior x:Name="passwordValidator"/> 
     </Entry.Behaviors> 
    </Entry> 
    <Button Text="Log In" TextColor="White" BackgroundColor="##ff77D065" Clicked="Button_Onclick"></Button> 
    </StackLayout> 
</ContentPage> 

HandleTextChangedイベントCSファイルのコードです:ここで

XAMLコードです

public class ValidationBehavior: Behavior<Entry> 
{ 
    const string pwRegex = @"^(?=.{8,})(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$"; 

    protected override void OnAttachedTo(Entry bindable) 
    { 
     bindable.TextChanged += HandleTextChanged; 
     base.OnAttachedTo(bindable); 
    } 

    void HandleTextChanged(object sender, TextChangedEventArgs e) 
    { 
     bool IsValid = false; 
     IsValid = (Regex.IsMatch(e.NewTextValue, pwRegex,RegexOptions.IgnoreCase)); 
     ((Entry)sender).TextColor = IsValid ? Color.Default : Color.Red; 
     Label errorLabel = ((Entry)sender).FindByName<Label>("errorMessage"); 
     if (IsValid) 
     { 
      errorLabel.Text = "Please enter the correct password"; 
     } 
     else 
     { 
      errorLabel.Text = ""; 
     } 
    } 

    protected override void OnDetachingFrom(Entry bindable) 
    { 
     bindable.TextChanged -= HandleTextChanged; 
     base.OnDetachingFrom(bindable); 
    } 
} 
+0

あなたはこの質問のいくつかのバリエーションを尋ねました** 5回**過去2日間。同じ質問の再掲載をやめてください。 – Jason

答えて

0

ジェイソンが真であると言う何を、多分あなたはただ一つだけ質問をしている必要があります。 これは私が最後にお答えする答えです。

まず:

<?xml version="1.0" encoding="utf-8" ?> 
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" 
     xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
     xmlns:local="clr-namespace:LoginUser" 
     x:Class="LoginUser.MainPage"> 
<StackLayout Spacing="20" Padding="50" VerticalOptions="Center"> 
    <Entry x:Name="txtUsername" Placeholder="Username"></Entry> 
    <Entry x:Name="txtPassword" Placeholder="Password" IsPassword="True"> 
    <Entry.Behaviors> 
     <local:ValidationBehavior x:Name="passwordValidator"/> 
    </Entry.Behaviors> 
    <Label Text="Your message for error" IsVisible="{Binding Source={x:Reference passwordValidator}, Path=IsInvalid}" TextColor="Red" FontSize="Micro"/> 
    </Entry> 
    <Button Text="Log In" TextColor="White" BackgroundColor="##ff77D065" Clicked="Button_Onclick"></Button> 
</StackLayout> 
</ContentPage> 

第二:このようなあなたのEntry以下Labelを追加します。この方法であるためにあなたのValidationBehaviorクラスを取得しようと、あなたのValidationBehaviorがあまりにも悪いです:

public class ValidationBehavior: Behavior<Entry> 
{ 
    const string pwRegex = @"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[^\da-zA-Z]).{8,15}$"; 

    static readonly BindablePropertyKey IsInvalidPropertyKey = BindableProperty.CreateReadOnly("IsInvalid", typeof(bool), typeof(EmailValidatorBehavior), false); 

    public static readonly BindableProperty IsInvalidProperty = IsInvalidPropertyKey.BindableProperty; 

    public bool IsInvalid 
    { 
     get { return (bool)base.GetValue(IsInvalidProperty); } 
     private set { base.SetValue(IsInvalidPropertyKey, value); } 
    } 

    protected override void OnAttachedTo(Entry bindable) 
    { 
     bindable.TextChanged += HandleTextChanged; 
    } 

    void HandleTextChanged(object sender, TextChangedEventArgs e) 
    { 
     IsInvalid = !(Regex.IsMatch(e.NewTextValue, pwRegex, RegexOptions.IgnoreCase, TimeSpan.FromMilliseconds(250))); 
     ((Entry)sender).TextColor = IsInvalid ? Color.Red : Color.Default; 
    } 

    protected override void OnDetachingFrom(Entry bindable) 
    { 
     bindable.TextChanged -= HandleTextChanged; 
    } 
} 

私はIsValidプロパティを**IsInvalid**に変更しましたので、これはより論理的です。

これは最終的に役立ち、より重複した質問は表示されないことを願っています。

+0

ありがとうWilson.itsはうまく働いています。 – Sridhar

関連する問題