2009-09-03 2 views
0

У меня есть ViewModel с свойством State и Datatemplate, в котором содержится простой прямоугольник с фоновой щеткой. Всякий раз, когда изменяется состояние ViewModel, я хочу вызвать анимацию, которая начинается с цвета, который в данный момент имеет кисть, и оживляет его до нового цвета, представляющего новое состояние. Я сделал это с datatriggers. И это почти работает. Единственная проблема, с которой я сталкиваюсь, заключается в том, что она не начинается с цвета, который имеет сейчас кисть, но с неодушевленным базовым цветом. Вероятно, это потому, что я удаляю анимацию в действии exit. Но если я этого не сделаю, я смогу только окунуться в один раз. Что мне не хватает?Переключение анимации на основе значения свойства

Еще один вопрос, который у меня есть: мне нужно это stateanimation во множестве разных наборов данных, которые он всегда связывает с тем же свойством («State»), и они всегда оживляют SolidColorbrush. Есть ли способ поделиться этими анимациями datatrigger через datatemplates с использованием ресурсов и/или стилей?

<DataTemplate.Triggers> 
    <DataTrigger Binding="{Binding Path=State}" Value="Active"> 
     <DataTrigger.EnterActions> 
      <BeginStoryboard x:Name="activeStoryboard" HandoffBehavior="SnapshotAndReplace"> 
       <Storyboard> 
        <ColorAnimation To="Green" FillBehavior="HoldEnd" Duration="00:00:0.25" Storyboard.TargetName="stateBrush" Storyboard.TargetProperty="Color" /> 
       </Storyboard> 
      </BeginStoryboard> 
     </DataTrigger.EnterActions> 
     <DataTrigger.ExitActions> 
      <RemoveStoryboard BeginStoryboardName="activeStoryboard" /> 
     </DataTrigger.ExitActions> 
    </DataTrigger> 
    <DataTrigger Binding="{Binding Path=State}" Value="Error"> 
     <DataTrigger.EnterActions> 
      <BeginStoryboard x:Name="errorStoryboard" HandoffBehavior="SnapshotAndReplace"> 
       <Storyboard> 
        <ColorAnimation To="Red" FillBehavior="HoldEnd" Duration="00:00:0.25" Storyboard.TargetName="stateBrush" Storyboard.TargetProperty="Color" /> 
       </Storyboard> 
      </BeginStoryboard> 
     </DataTrigger.EnterActions> 
     <DataTrigger.ExitActions> 
      <RemoveStoryboard BeginStoryboardName="errorStoryboard" /> 
     </DataTrigger.ExitActions> 
    </DataTrigger> 
    <DataTrigger Binding="{Binding Path=State}" Value="Wait"> 
     <DataTrigger.EnterActions> 
      <BeginStoryboard x:Name="waitStoryboard" HandoffBehavior="SnapshotAndReplace"> 
       <Storyboard> 
        <ColorAnimation To="Yellow" FillBehavior="HoldEnd" Duration="00:00:0.25" Storyboard.TargetName="stateBrush" Storyboard.TargetProperty="Color" /> 
       </Storyboard> 
      </BeginStoryboard> 
     </DataTrigger.EnterActions> 
     <DataTrigger.ExitActions> 
      <RemoveStoryboard BeginStoryboardName="waitStoryboard" /> 
     </DataTrigger.ExitActions> 
    </DataTrigger> 
    <DataTrigger Binding="{Binding Path=State}" Value="Inactive"> 
     <DataTrigger.EnterActions> 
      <BeginStoryboard x:Name="inactiveStoryboard" HandoffBehavior="SnapshotAndReplace"> 
       <Storyboard> 
        <ColorAnimation To="Gray" FillBehavior="HoldEnd" Duration="00:00:0.25" Storyboard.TargetName="stateBrush" Storyboard.TargetProperty="Color" /> 
       </Storyboard> 
      </BeginStoryboard> 
     </DataTrigger.EnterActions> 
     <DataTrigger.ExitActions> 
      <RemoveStoryboard BeginStoryboardName="inactiveStoryboard" /> 
     </DataTrigger.ExitActions> 
    </DataTrigger> 
</DataTemplate.Triggers> 

ответ

0

Я не могу полностью ответить на ваш вопрос, но я могу по крайней мере, указать на то, что вы можете поделиться раскадровки, но я не уверен, о самих DataTriggers. Интересная идея. Я задаюсь вопросом, что такое Bindings, потому что у меня часто много повторений одного связывания, и он пытался найти способ объявить его один раз и повторно использовать по крайней мере в пределах одного элемента управления или XAML ResourceDictionary.

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