2009-06-02 12 views
5

Si tengo una BooleanAnimation que establece una propiedad, esa propiedad se bloquea y no se puede cambiar por ningún otro medio.La animación Boolean bloquea la propiedad

Ejemplo:

<EventTrigger 
    SourceName="myButton" 
    RoutedEvent="Button.Click"> 
    <EventTrigger.Actions> 
     <BeginStoryboard> 
      <Storyboard> 
       <BooleanAnimationUsingKeyFrames 
        Storyboard.TargetName="myCheckBox" 
        Storyboard.TargetProperty="IsChecked" 
        FillBehavior="HoldEnd"> 
        <DiscreteBooleanKeyFrame 
         KeyTime="00:00:00" 
         Value="False" /> 
       </BooleanAnimationUsingKeyFrames> 
      </Storyboard> 
     </BeginStoryboard> 
    </EventTrigger.Actions> 
</EventTrigger> 

En este ejemplo, si se hace clic en el botón de la casilla de verificación se establece en falso, sin embargo, si el usuario intenta comprobar la casilla de verificación de nuevo la casilla de verificación no responde. La propiedad IsChecked no se puede configurar a través de un código (después de haber hecho clic en el botón).

Puedo crear otra animación que actualice el CheckBox, pero ese no es el comportamiento que requiero.

También probé FillBehavior = "Stop", pero eso solo hace que la animación no funcione tampoco.

Respuesta

6

El CheckBox todavía se está configurando, pero la animación todavía se está ejecutando, por lo que parece estar desmarcándola. Hay algunas maneras en que esto puede solucionarse para que la animación ya no controle la propiedad en la casilla de verificación. La descripción general de MSDN Animation habla de lo que sucede cuando finaliza la animación. Y how to set a Property after animating it with a Storyboard pasa por encima de otras opciones.

+1

Ok, sí, veo cómo está funcionando la animación ahora. Desafortunadamente, esto significa que no puedo establecer una propiedad con un EventTrigger, a menos que bloquee esa propiedad usando "HoldEnd". El enlace para "cómo establecer una propiedad después de animarlo con un Storyboard" solo funcionará cuando haya un código disponible. Para esta instancia en particular, intento mantenerme dentro del XAML ya que es un control personalizado. Crearé una nueva pregunta. –

1

reemplazar

FillBehavior = "HoldEnd"

con

Duración = "00:00:01" FillBehavior = "Stop"

y Funcionará :-)

+2

Esa no es la respuesta (completa). FillBehavior of Stop evitará que la propiedad se bloquee, pero también restablecerá la propiedad a su valor original antes de la animación. A veces, puede solucionar esto configurando manualmente el valor deseado cuando finalice el guión gráfico. – Jowen

Cuestiones relacionadas