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 - Activate from XAML?

Special Thanks to: ダン・オークレア

于 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 に答える