2015-11-05 50 views
0

我有一个带有按钮的登录表单(btnLogin)。当用户点击btnLogin,以下Storyboard被触发禁用btnLogin,txtUsername,pbPassword ...反向触发动画如果方法失败使用Xaml,而不是代码

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

...因为这Storyboard运行时,Button.Click事件也连接到btnLogin_Click方法验证用户凭证。很公平!

目前,如果登录尝试失败,我必须使用以下(脏?!)代码btnLogin_Click重新启用btnLogin,txtUsername,pbPassword控制等等细节可以重新进入......

btnLogin.Triggers.Clear(); 
btnLogin.BeginAnimation(UIElement.IsEnabledProperty, null); 
txtUsername.BeginAnimation(UIElement.IsEnabledProperty, null); 
pbPassword.BeginAnimation(UIElement.IsEnabledProperty, null); 

我可以使用Xaml来处理这个重新启用吗?我确信我可以,我只是不知道该怎么做?!

感谢您的帮助:O)


UPDATE

我使用EnterActionsExitActions试图通过bars222的建议,但这种做法有没有办法确定btnLogin_Click事件导致登录成功或失败。

回答

1

如果我清楚明白,您想在登录尝试后将IsEnabled设置为true。在这种情况下,您可以使用EventTrigger.EnterActionsEventTrigger.ExitActions触发器。这里举一些例子。

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

更新

解数据绑定。您可以创建一些指示授权过程的属性。你应该在auth过程中更新这个。

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)); 
    } 
} 

您应该设置这些元素的DataContext。例如,如果您在授权窗口中创建属性。你可以写在构造函数中。

this.DataContext = this; 

并将其绑定到您的元素以启用/禁用它。

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

此外,我认为最好使用数据绑定为你的情况,但它需要一些代码背后。 – bars222

+0

感谢您的回复。不幸的是,该方法根本不禁用按钮。我认为它可能会禁用,然后立即启用它。你能给我提供关于你提到的数据绑定解决方案的更多信息吗? –

+0

对于第一个答案,我建议授权表单将在成功验证过程后被禁用。用数据绑定示例更新答案。 – bars222