2015-11-05 6 views
0

J'ai un formulaire de connexion avec un bouton (btnLogin). Lorsqu'un utilisateur clique sur btnLogin, est déclenchée la Storyboard suivante pour désactiver btnLogin, txtUsername, pbPassword ...Animation déclenchée par inversion si la méthode échoue à l'aide de XAML, pas de code derrière

<EventTrigger RoutedEvent="Button.Click"> 
    <EventTrigger.Actions> 
     <BeginStoryboard> 
      <Storyboard> 
       <BooleanAnimationUsingKeyFrames Storyboard.TargetProperty="IsEnabled" FillBehavior="HoldEnd"> 
        <DiscreteBooleanKeyFrame KeyTime="00:00:00" Value="False" /> 
       </BooleanAnimationUsingKeyFrames> 
       <BooleanAnimationUsingKeyFrames Storyboard.TargetName="txtUsername" Storyboard.TargetProperty="IsEnabled" FillBehavior="HoldEnd"> 
        <DiscreteBooleanKeyFrame KeyTime="00:00:00" Value="False" /> 
       </BooleanAnimationUsingKeyFrames> 
       <BooleanAnimationUsingKeyFrames Storyboard.TargetName="pbPassword" Storyboard.TargetProperty="IsEnabled" FillBehavior="HoldEnd"> 
        <DiscreteBooleanKeyFrame KeyTime="00:00:00" Value="False" /> 
       </BooleanAnimationUsingKeyFrames> 
      </Storyboard> 
     </BeginStoryboard> 
    </EventTrigger.Actions> 
</EventTrigger> 

... que ce Storyboard fonctionne, l'événement Button.Click est également attaché à une méthode btnLogin_Click qui vérifie les informations d'identification des utilisateurs. C'est suffisant!

Actuellement, si la tentative de connexion échoue, je dois utiliser le code suivant (sale ?!) à btnLogin_Click pour réactiver la btnLogin, txtUsername, pbPassword contrôles afin que les détails peuvent être réinscrit ... Puis-je gérer cette réactivation en utilisant Xaml à la place? Je suis sûr que je peux, je ne peux pas comprendre comment le faire ?!

Merci pour votre aide: O)


MISE À JOUR

J'ai essayé d'utiliser EnterActions et ExitActions comme suggéré par bars222, mais cette approche n'a aucun moyen de déterminer si l'événement btnLogin_Click a abouti à une connexion réussie ou infructueuse.

Répondre

1

Si je comprends bien, vous voulez définir IsEnabled à true après la tentative de connexion. Dans ce cas, vous pouvez utiliser les déclencheurs EventTrigger.EnterActions et EventTrigger.ExitActions. Voici un exemple.

<EventTrigger RoutedEvent="Button.Click"> 
    <EventTrigger.EnterActions> 
     <BeginStoryboard> 
      <Storyboard> 
       <BooleanAnimationUsingKeyFrames Storyboard.TargetProperty="IsEnabled" FillBehavior="HoldEnd"> 
        <DiscreteBooleanKeyFrame KeyTime="00:00:00" Value="False" /> 
       </BooleanAnimationUsingKeyFrames> 
      </Storyboard> 
     </BeginStoryboard> 
    </EventTrigger.EnterActions> 
    <EventTrigger.ExitActions> 
     <BeginStoryboard> 
      <Storyboard> 
       <BooleanAnimationUsingKeyFrames Storyboard.TargetProperty="IsEnabled" FillBehavior="HoldEnd"> 
        <DiscreteBooleanKeyFrame KeyTime="00:00:00" Value="True" /> 
       </BooleanAnimationUsingKeyFrames> 
      </Storyboard> 
     </BeginStoryboard> 
    </EventTrigger.ExitActions> 
</EventTrigger> 

Mise à jour

Solution avec liaison de données. Vous pouvez créer une propriété qui indique le processus d'autorisation. Vous devriez le mettre à jour pendant le processus d'authentification.

private bool _isAuth; 
public bool IsAuth 
{ 
    get { return _isAuth; } 
    set { _isAuth = value; NotifyPropertyChanged("IsAuth"); } 
} 

#region INotifyPropertyChanged Members 
public event PropertyChangedEventHandler PropertyChanged; 
#endregion 
protected void NotifyPropertyChanged(String info) 
{ 
    if (PropertyChanged != null) 
    { 
     PropertyChanged(this, new PropertyChangedEventArgs(info)); 
    } 
} 

Vous devez définir DataContext de ces éléments. Par exemple, si vous avez créé une propriété dans la fenêtre d'autorisation. Vous pouvez écrire dans le constructeur.

this.DataContext = this; 

Et de le lier à vos éléments pour l'activer/désactiver.

<Button Click="Button_Click" IsEnabled="{Binding IsAuth}" /> 
+0

Aussi je pense qu'il est préférable d'utiliser la liaison de données pour votre cas, mais il nécessite du code derrière. – bars222

+0

Merci pour la réponse. Malheureusement, cette méthode ne désactive pas le bouton du tout. Je pense qu'il est probablement désactivé, puis le permet immédiatement. Pouvez-vous me donner plus d'informations concernant la solution de liaison de données que vous avez mentionnée s'il vous plaît? –

+0

Pour la première réponse, j'ai suggéré que le formulaire d'autorisation sera désactivé après le processus d'authentification réussie. Réponse mise à jour avec exemple de liaison de données. – bars222