如果方法使用Xaml失败,则反向触发动画,而不是代码隐藏
本文关键字:动画 隐藏 代码 方法 Xaml 失败 如果 | 更新日期: 2023-09-27 18:20:41
我有一个带有按钮的登录表单(btnLogin)。当用户单击btnLogon时,会触发以下Storyboard
以禁用BTnLogon、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
中使用以下(脏?!)代码来重新启用btnLogon、txtUsername、pbPassword控件,以便可以重新输入详细信息。。。
btnLogin.Triggers.Clear();
btnLogin.BeginAnimation(UIElement.IsEnabledProperty, null);
txtUsername.BeginAnimation(UIElement.IsEnabledProperty, null);
pbPassword.BeginAnimation(UIElement.IsEnabledProperty, null);
我可以使用Xaml来处理重新启用吗?我相信我能,我就是不知道怎么做?!
谢谢你的帮助:
更新
我已经尝试过按照bars222的建议使用EnterActions
和ExitActions
,但这种方法无法确定btnLogin_Click
事件是导致登录成功还是失败。
如果我清楚地理解,您希望在登录尝试后将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}" />