2016-03-11 2 views
2

Это должно быть довольно простым, но я не могу понять, что это правильно. У меня есть коллекция System.Windows.Controls.Image. Когда я выбираю один из них, я хотел бы, чтобы все остальные получили непрозрачность 0.5. Я использую MVVM, и логика этого (поиск выбранного изображения и установка его как Enabled) выполняется в ViewModel и работает. Поэтому в основном это работает:Установить непрозрачность изображения с помощью DoubleAnimation

<Image Grid.Row="0" Source="{Binding ItemImage}" IsEnabled="{Binding ItemImageEnabled}"> 
<Image.Style> 
    <Style TargetType="Image"> 
     <Style.Triggers> 
      <Trigger Property="IsEnabled" Value="False"> 
       <Setter Property="Opacity" Value="0.5"/> 
      </Trigger> 
      <Trigger Property="IsEnabled" Value="True"> 
       <Setter Property="Opacity" Value="1.0"/> 
      </Trigger> 
     </Style.Triggers> 
    </Style> 
</Image.Style> 
</Image> 

Теперь я хотел бы непрозрачность сдвигая анимировать, угасание его от 1.0 до 0.5, когда не выбран образ, и выцветание от 0.5 до 1.0, когда она есть. Я бы подумал, что это будет работать:

<Image Grid.Row="0" Source="{Binding ItemImage}" IsEnabled="{Binding ItemImageEnabled}"> 
<Image.Style> 
    <Style TargetType="Image"> 
     <Style.Triggers> 
      <Trigger Property="IsEnabled" Value="False"> 
       <Trigger.EnterActions> 
        <BeginStoryboard> 
         <Storyboard> 
          <DoubleAnimation Storyboard.TargetProperty="Opacity" From="1" To="0.5" BeginTime="0:0:0" Duration="0:0:1"/> 
         </Storyboard> 
        </BeginStoryboard> 
       </Trigger.EnterActions> 
      </Trigger> 
      <Trigger Property="IsEnabled" Value="True"> 
       <Trigger.EnterActions> 
        <BeginStoryboard> 
         <Storyboard> 
          <DoubleAnimation Storyboard.TargetProperty="Opacity" From="0.5" To="1" BeginTime="0:0:0" Duration="0:0:1"/> 
         </Storyboard> 
        </BeginStoryboard> 
       </Trigger.EnterActions> 
      </Trigger> 
     </Style.Triggers> 
    </Style> 
</Image.Style> 

... Но это не

Кто-нибудь есть какие-либо идеи. Любая помощь будет принята с благодарностью. Заранее спасибо.

ответ

6

Вам необходимо Trigger.ExitActions вместо двух Trigger. Это должно быть то, что вы хотите:

<Style TargetType="Image"> 
    <Style.Triggers>   
     <Trigger Property="IsEnabled" Value="True"> 
      <Trigger.EnterActions> 
       <BeginStoryboard> 
        <Storyboard> 
         <DoubleAnimation Storyboard.TargetProperty="Opacity" From="0.5" To="1" BeginTime="0:0:0" Duration="0:0:1"/> 
        </Storyboard> 
       </BeginStoryboard> 
      </Trigger.EnterActions> 
      <Trigger.ExitActions> 
       <BeginStoryboard> 
        <Storyboard> 
         <DoubleAnimation Storyboard.TargetProperty="Opacity" From="1" To="0.5" BeginTime="0:0:0" Duration="0:0:1"/> 
        </Storyboard> 
       </BeginStoryboard> 
      </Trigger.ExitActions> 
     </Trigger> 
    </Style.Triggers> 
</Style> 
+0

Perfect - работает как шарм. Большое спасибо – Viking

+1

Это аккуратный подход, я собирался пойти, чтобы он сделал шаблон RadioButton, поэтому только один из них можно было выбрать за один раз. +1 –