2013-09-21 3 views
2

У меня есть список с шаблоном listboxitem, который привязан к объекту. Один из элементов управления listboxitem - это изображение, и его источник также привязан к свойству внутри datacontext. Таким образом, изображение внутри элемента управления Image отличается от этого свойства. Я хочу анимировать изображение, но только конкретное (когда значение свойства привязки - это только определенное значение). Я думаю, есть другие способы сделать это, возможно, используя код позади. Но я бы действительно, как использовать его в коде XAML, поэтому я думал, используя анимацию внутри DataTrigger, это имеет смысл для меня, потому что старт/окончание анимации зависит от DataContext:WPF Как анимация изображения внутри listboxitem с помощью триггера данных?

    <DataTrigger Binding="{Binding Path=Value.SomeProperty}" 
            Value="SomePropertyValue"> 
         <DataTrigger.EnterActions> 
          <BeginStoryboard> 
           <Storyboard TargetName="SomePropertyIcon"> 
            <StaticResource ResourceKey="SomePropertyValueAnimation"/> 
           </Storyboard> 
          </BeginStoryboard> 
         </DataTrigger.EnterActions> 
         <DataTrigger.ExitActions> 
          <BeginStoryboard> 
           <Storyboard TargetName="SomePropertyIcon"> 
            <StaticResource ResourceKey="StopSomePropertyValueAnimation"/> 
           </Storyboard> 
          </BeginStoryboard> 
         </DataTrigger.ExitActions> 
        </DataTrigger> 

Но я не могу заставить его работать так или иначе. Я попытался поместить этот код в стиль listBox, а затем применить этот стиль к изображению, он не работал, я также попытался поместить внутри listBox.ItemTamplate и в другие места, но ничего не помогло. Вот код. может быть, это может помочь понять (я вставил только relevan код здесь):

<UserControl ...> 
<UserControl.Resources> 
    <local:SomePropertyToImageConverter x:Key="somePropertyToImageConverter"/> 
    <DoubleAnimation x:Key="SomePropertyValueAnimation" Storyboard.TargetProperty="(UIElement.RenderTransform).(RotateTransform.Angle)" To="45" Duration="0:0:2" RepeatBehavior="Forever"/> 
    <DoubleAnimation x:Key="StopSomePropertyValueAnimation" Storyboard.TargetProperty="(UIElement.RenderTransform).(RotateTransform.Angle)" To="0" Duration="0:0:2"/> 
</UserControl.Resources> 
<Grid> 

    <ListBox Name="myListBox" 
     ItemsSource="{Binding Path=myDataContext}" IsEnabled="True" Focusable="True" SelectionMode="Extended"> 

     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <Grid> 
        <Grid.ColumnDefinitions> 
         <ColumnDefinition Width="Auto"/> 
         <ColumnDefinition Width="Auto"/> 
         <ColumnDefinition Width="Auto"/> 
        </Grid.ColumnDefinitions> 
        <Image Width="20" Height="20" Name="SomePropertyIcon" 

        Source="{Binding Path=Value.SomeProperty, Converter={StaticResource somePropertyToImageConverter}}"/> 

       </Grid> 

       <DataTemplate.Triggers> 
        <DataTrigger Binding="{Binding Path=Value.SomeProperty}" 
            Value="SomePropertyValue"> 
         <DataTrigger.EnterActions> 
          <BeginStoryboard> 
           <Storyboard TargetName="SomePropertyIcon"> 
            <StaticResource ResourceKey="SomePropertyValueAnimation"/> 
           </Storyboard> 
          </BeginStoryboard> 
         </DataTrigger.EnterActions> 
         <DataTrigger.ExitActions> 
          <BeginStoryboard> 
           <Storyboard TargetName="SomePropertyIcon"> 
            <StaticResource ResourceKey="StopSomePropertyValueAnimation"/> 
           </Storyboard> 
          </BeginStoryboard> 
         </DataTrigger.ExitActions> 
        </DataTrigger> 
       </DataTemplate.Triggers> 

      </DataTemplate> 
     </ListBox.ItemTemplate> 
     <ListBox.ItemContainerStyle> 
      <Style TargetType="{x:Type ListBoxItem}"> 
       <Style.Triggers> 
        <DataTrigger Binding="{Binding Path=Value.SomeProperty}" 
            Value="SomePropertyValue">        
         <Setter Property="Background" Value="Bisque"/> 
        </DataTrigger> 

       </Style.Triggers> 
      </Style> 
     </ListBox.ItemContainerStyle> 
    </ListBox> 
</Grid> 

ответ

0

Анимация не может изменить значения свойств для пути свойства, не существует. «Изображение», которое вы пытаетесь манипулировать, не имеет «Повернуть преобразование», вы должны добавить его, и он должен работать:

<Image Width="20" Height="20" Name="SomePropertyIcon" 
      Source="{Binding Path=Value.SomeProperty, Converter={StaticResource somePropertyToImageConverter}}"> 
     <Image.RenderTransform > 
      <RotateTransform /> 
     </Image.RenderTransform> 
    </Image> 
+0

это сработало! Благодаря! – user2801318

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