2009-06-02 13 views
5

Jeśli mam funkcję BooleanAnimation, która ustawia właściwość, właściwość ta staje się zablokowana i nie można jej zmienić w żaden inny sposób.Właściwość blokowania animacji Boolean

Przykład:

<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> 

W tym przykładzie, jeśli kliknięciu przycisku pole wyboru jest ustawiona na false, jeśli jednak użytkownik spróbuje ponownie zaznacz pole pole wyboru jest obojętne. Właściwość IsChecked nie może być ustawiona również za pomocą kodu (po kliknięciu przycisku).

Mogę utworzyć kolejną animację, która zaktualizuje moduł CheckBox, ale nie jest to zachowanie, którego wymagam.

Próbowałem również FillBehavior = "Stop", ale to powoduje, że animacja również nie działa.

Odpowiedz

6

Element CheckBox jest nadal ustawiany, ale animacja jest nadal uruchomiona, dlatego wydaje się, że odznacza to. Istnieje kilka sposobów, które można naprawić, aby animacja nie kontrolowała już właściwości pola wyboru. Omówienie MSDN Animation mówi o tym, co się stanie, gdy animacja się zakończy. I how to set a Property after animating it with a Storyboard przechodzi przez kilka innych opcji.

+1

OK, tak Widzę teraz, jak działa animacja. Niestety oznacza to, że nie mogę ustawić właściwości za pomocą EventTrigger, chyba że zablokuję tę właściwość za pomocą "HoldEnd". Łącze "jak ustawić właściwość po animacji z Storyboard", będzie działało tylko wtedy, gdy dostępny jest kod. W tym konkretnym przypadku staram się zachować w XAML, ponieważ jest to niestandardowy formant. Stworzę nowe pytanie. –

1

zastąpić

FillBehavior = "HoldEnd"

z

Duration = "00:00:01" FillBehavior = "Stop"

i to zadziała :-)

+2

To nie jest (kompletna) odpowiedź. Funkcja FillBehavior of Stop uniemożliwi zablokowanie właściwości, ale także przywróci właściwość do pierwotnej wartości przed animacją. Czasami można obejść ten problem ręcznie, ustawiając żądaną wartość po zakończeniu storyboardu. – Jowen