1

我有一个从 Observable 集合中读取的列表框,并且是 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}" />

一般来说,我的问题是“什么是在这个列表框中的特定项目上做动画的最简单方法是什么?当它们被选中时?基本上,“grid1”内的图像将缓慢地将其不透明度设置为 1。

我更喜欢使用状态,但我不知道有什么方法可以将 blend 和 xaml 告诉“更改选定项目时,在 0.3 秒内将图像不透明度更改为 1”。事实上,我一直在使用 VisualStateManager 在 .cs 文件中执行此操作。

此外,还有另一个问题。更改选定的索引时,我们将获得CS文件并查看SelectedItem。SelectedItem 返回它绑定到的对象的实例(可观察集合内的对象),而不是 DataTemplate/ListItem 等的实例。那么我如何才能从这个列表中提取正确的图像呢?

使用 VisualStateManager 的状态动画如果只是正常的事情,我可以处理得很好,但是当涉及到生成的列表框的项目时,我迷路了。

谢谢

4

2 回答 2

1

这可以通过另一个帖子来回答: WPF/Silverlight States - 从 XAML 激活?

特别感谢:丹·奥克莱尔

于 2010-05-24T23:48:25.147 回答
0

我已经在列表框项目模板中声明了动画,方法是使用堆栈面板中的故事板而不是网格。

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

如果你想在网格中使用它,你不需要提供触发功能。它从右向左移动文本块。请尝试举办一个活动来激活它。

于 2012-02-15T06:06:19.393 回答