2010-05-22 2 views
1

У меня есть ListBox, который считывает из коллекции наблюдаемых, и ItemTemplate'ed:Государственная анимация на ListBox ItemTemplate

<DataTemplate x:Key="DataTemplate1"> 
    <Grid x:Name="grid" Height="47.333" Width="577" Opacity="0.495"> 
     <Image HorizontalAlignment="Left" Margin="10.668,8,0,8" Width="34" Source="{Binding ImageLocation}"/> 
     <TextBlock Margin="56,8,172.334,8" TextWrapping="Wrap" Text="{Binding ApplicationName}" FontSize="21.333"/> 
     <Grid x:Name="grid1" HorizontalAlignment="Right" Margin="0,10.003,-0.009,11.33" Width="26" Opacity="0" RenderTransformOrigin="0.5,0.5"> 
      <Image HorizontalAlignment="Stretch" Margin="0" Source="image/downloads.png" Stretch="Fill" MouseDown="Image_MouseDown" /> 
     </Grid> 
    </Grid> 
</DataTemplate> 

<ListBox x:Name="searchlist" Margin="8" ItemTemplate="{DynamicResource DataTemplate1}" ItemsSource="{Binding SearchResults}" SelectionChanged="searchlist_SelectionChanged" ItemContainerStyle="{DynamicResource ListBoxItemStyle1}" /> 

В общем, на мой вопрос: «Что это самый простой способ сделать анимацию по конкретным пунктам в этот список Как они выбраны? В основном изображение внутри «сетки1» будет устанавливать его непрозрачность до 1, медленно.

Я бы предпочел использовать состояния, но я не знаю, как просто рассказать blend и xaml на «Когда выбранный элемент изменен, измените непрозрачность изображения на 1 в течение 0,3 секунды». Infact, я делаю это в файле .cs с помощью VisualSt ateManager.

Кроме того, есть еще одна проблема. Когда выбранный индекс изменен, мы перейдем к файлу CS и посмотрим на SelectedItem. SelectedItem возвращает экземпляр объекта, в который он был привязан (объект внутри наблюдаемой коллекции), а НЕ экземпляр DataTemplate/ListItem и т. Д. Итак, как я могу вытащить правильное изображение из этого списка?

Государственная анимация с VisualStateManager Я могу обрабатывать отлично, если это просто нормальные вещи, но когда дело доходит до созданных элементов списка, я теряюсь.

Благодаря

+0

Silverlight не поддерживает 'DynamicResource', поэтому почему тег Silverlight? – AnthonyWJones

ответ

0

Я изложил анимацию в шаблонах ListBox элементов с помощью раскадровки в Вместо этого, если сетка.

<StackPanel Grid.Row="0" Height="175" Orientation="Vertical" Width="Auto"> 

    <StackPanel.Triggers> 
    <EventTrigger RoutedEvent="StackPanel.Loaded"> 
     <EventTrigger.Actions> 
     <BeginStoryboard> 
      <Storyboard x:Name="mystoryboard"> 

      <DoubleAnimationUsingKeyFrames 
      Storyboard.TargetName="Trans" 
      Storyboard.TargetProperty="X"> 
       <LinearDoubleKeyFrame Value="-387" KeyTime="0:0:1" /> 
      </DoubleAnimationUsingKeyFrames> 
      </Storyboard> 

     </BeginStoryboard> 
     </EventTrigger.Actions> 
    </EventTrigger> 
    </StackPanel.Triggers> 

    <TextBlock Margin="400,40,-400,0" TextWrapping="Wrap" Text="{Binding ApplicationName}" FontSize="21.333"> 
    <TextBlock.RenderTransform> 
     <TranslateTransform x:Name="Trans" X="0" Y="0" /> 
    </TextBlock.RenderTransform> 
    </TextBlock> 
</StackPanel> 

Если вы хотите использовать его в сетке, вам не нужно давать триггерные функции. Он перемещает текстовый блок справа налево. Пожалуйста, попробуйте активировать мероприятие.

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