2015-11-05 5 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

Я попытался с помощью EnterActions и ExitActions как предложено bars222, но этот подход не имеет средств, чтобы определить, если btnLogin_Click событие привели к успешному или неудачному входу в систему.

ответ

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> 

Update

Решение с помощью привязки данных. Вы можете создать некоторое свойство, которое указывает на процесс авторизации. Вы должны обновить это во время процесса 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

 Смежные вопросы

  • Нет связанных вопросов^_^