我有一个带按钮的登录表单( btnLogin )。当用户点击 btnLogin 时,会触发以下Storyboard
以禁用 btnLogin,txtUsername,pbPassword ...
<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)
更新
我已尝试使用条形码222建议的EnterActions
和ExitActions
,但此方法无法确定btnLogin_Click
事件是否导致登录成功或失败。
答案 0 :(得分:1)
如果我清楚地了解,您希望在登录尝试后将IsEnabled
设置为true。在这种情况下,您可以使用EventTrigger.EnterActions
和EventTrigger.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>
<强>更新强>
数据绑定解决方案。您可以创建一些表示授权过程的属性。您应该在身份验证过程中更新此信息。
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}" />