2015-05-28 2 views
4

Я работаю над переходом некоторого кода из silverlight в WPF, и мои VisualStates работают некорректно.wpf использовать VisualStateManager для изменения Видимость

Я использую visualstatemanager для контроля видимости некоторых текстовых полей. Я не использую никаких переходов для анимации изменения, я просто хочу, чтобы поля были свернуты в одном состоянии, а затем видны в другом.

Xaml из Silverlight:

<VisualStateManager.VisualStateGroups> 
     <VisualStateGroup x:Name="LostPasswordStates"> 
      <VisualState x:Name="LostPassword_Start"> 
       <Storyboard> 

        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="lbl_UserName" Storyboard.TargetProperty="(UIElement.Visibility)"> 
         <DiscreteObjectKeyFrame KeyTime="00:00:00" Value="Visible" /> 
        </ObjectAnimationUsingKeyFrames> 

        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="txt_UserName" Storyboard.TargetProperty="(UIElement.Visibility)"> 
         <DiscreteObjectKeyFrame KeyTime="00:00:00" Value="Visible" /> 
        </ObjectAnimationUsingKeyFrames> 

        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="txt_UserName" Storyboard.TargetProperty="(TextBox.IsReadOnly)"> 
         <DiscreteObjectKeyFrame KeyTime="00:00:00" Value="False" /> 
        </ObjectAnimationUsingKeyFrames> 

       </Storyboard> 
      </VisualState> 
      <VisualState x:Name="LostPassword_Success"> 
       <Storyboard> 

        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="lbl_UserName" Storyboard.TargetProperty="(UIElement.Visibility)"> 
         <DiscreteObjectKeyFrame KeyTime="00:00:00" Value="Collapsed" /> 
        </ObjectAnimationUsingKeyFrames> 

        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="txt_UserName" Storyboard.TargetProperty="(UIElement.Visibility)"> 
         <DiscreteObjectKeyFrame KeyTime="00:00:00" Value="Collapsed" /> 
        </ObjectAnimationUsingKeyFrames> 

        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="btn_Reset" Storyboard.TargetProperty="(UIElement.Visibility)"> 
         <DiscreteObjectKeyFrame KeyTime="00:00:00" Value="Collapsed" /> 
        </ObjectAnimationUsingKeyFrames> 

       </Storyboard> 
      </VisualState> 
     </VisualStateGroup> 
    </VisualStateManager.VisualStateGroups> 

я получаю следующее исключение:

Необработанное исключение типа 'System.Windows.Media.Animation.AnimationException' произошло в PresentationCore.dll

Дополнительная информация: Невозможно анимировать свойство «Видимость» в «System.Windows.Controls.TextBox» с помощью «System.Windows.Me» dia.Animation.ObjectAnimationUsingKeyFrames. Подробнее см. Внутреннее исключение.

Так что мой вопрос к вам:

Если я не могу использовать System.Windows.Media.Animation. ObjectAnimationUsingKeyFrames для этого, что я должен использовать?

+0

Какая версия WPF? У меня есть практически идентичный раскадровка, оживляющая свойство 'UIElement.Visibility' на' Border', которое отлично работает в 4.0 и 4.5. –

+1

Единственное отличие, которое я вижу, это то, что я использую '{x: Static Visibility.Visible}' как 'Value', а не просто' Visible'. –

+0

Вы правы, я изменил значения в формате {x: Static Visibility.Collapsed} в моем коде wpf. (Я скопировал текст выше stright из версии silverlight) Кроме того, я использую .net 4.5 – Shaboboo

ответ

6

Это работает для меня, используя .NET 4.5:

<VisualStateManager.VisualStateGroups> 
    <VisualStateGroup x:Name="LostPasswordStates"> 
     <VisualState x:Name="LostPassword_Start"> 
      <Storyboard> 

       <ObjectAnimationUsingKeyFrames Storyboard.TargetName="lbl_UserName" Storyboard.TargetProperty="(UIElement.Visibility)"> 
        <DiscreteObjectKeyFrame KeyTime="00:00:00" Value="{x:Static Visibility.Visible}" /> 
       </ObjectAnimationUsingKeyFrames> 

       <ObjectAnimationUsingKeyFrames Storyboard.TargetName="txt_UserName" Storyboard.TargetProperty="(UIElement.Visibility)"> 
        <DiscreteObjectKeyFrame KeyTime="00:00:00" Value="{x:Static Visibility.Visible}" /> 
       </ObjectAnimationUsingKeyFrames> 

       <BooleanAnimationUsingKeyFrames Storyboard.TargetName="txt_UserName" Storyboard.TargetProperty="(TextBox.IsReadOnly)"> 
        <DiscreteBooleanKeyFrame KeyTime="00:00:00" Value="False" /> 
       </BooleanAnimationUsingKeyFrames> 

      </Storyboard> 
     </VisualState> 
     <VisualState x:Name="LostPassword_Success"> 
      <Storyboard> 

       <ObjectAnimationUsingKeyFrames Storyboard.TargetName="lbl_UserName" Storyboard.TargetProperty="(UIElement.Visibility)"> 
        <DiscreteObjectKeyFrame KeyTime="00:00:00" Value="{x:Static Visibility.Collapsed}" /> 
       </ObjectAnimationUsingKeyFrames> 

       <ObjectAnimationUsingKeyFrames Storyboard.TargetName="txt_UserName" Storyboard.TargetProperty="(UIElement.Visibility)"> 
        <DiscreteObjectKeyFrame KeyTime="00:00:00" Value="{x:Static Visibility.Collapsed}" /> 
       </ObjectAnimationUsingKeyFrames> 

       <ObjectAnimationUsingKeyFrames Storyboard.TargetName="btn_Reset" Storyboard.TargetProperty="(UIElement.Visibility)"> 
        <DiscreteObjectKeyFrame KeyTime="00:00:00" Value="{x:Static Visibility.Collapsed}" /> 
       </ObjectAnimationUsingKeyFrames> 

      </Storyboard> 
     </VisualState> 
    </VisualStateGroup> 
</VisualStateManager.VisualStateGroups> 

Есть два изменения текущего кода:

  • Вместо "Collapsed" и "Visible", то Value установлен в "{x:Static Visibility.Collapsed}" и "{x:Static Visibility.Visible}" ;
  • В собственности IsReadOnly используется BooleanAnimationUsingKeyFrames вместо ObjectAnimationUsingKeyFrames;
+0

Вы были правы, я пропустил несколько {x: Static Visibility.Visible} в моем коде wpf. сейчас он работает, спасибо! – Shaboboo

0

Вы можете только анимировать свойства числовых типов (двойные). Видимость не может быть анимирована, потому что она переименована, и нет никакого способа оживить этот смысл. Если вы хотите затухать что-то, вы можете использовать свойство opacity.

+0

Я просто хочу, чтобы он был виден в один момент и рухнул на следующий, мне совсем не нужно его оживлять. Должен ли я использовать визуализатор для этого? Я использовал диспетчер визуальных состояний в моем коде Silverlight, и я хочу использовать его как можно больше. Я знаю, что могу добиться тех же результатов в коде. – Shaboboo

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