2

ItemsControlその にバインドする がありますDataContext。変化するときは、アニメーションDataContextの高さ変化が欲しいです。のイベントItemsControlを指定しようとしました:DataContextChangedItemsControl

<ItemsControl x:Name="items" ItemsSource="{Binding}" ItemTemplate="{StaticResource LocationTemplate}" DataContextChanged="Items_DataContextChanged">

DoubleAnimationそしてハンドラーで、高さ用を作成しようとしました。Fromしかし、Toプロパティの指定方法がわかりません。誰でも助けることができますか?ありがとう!

4

3 に答える 3

1

でラップすることで、(私が思うに)あなたが求めている効果を作成できItemsControlましたCanvas

<Canvas x:Name="ClippingContainer" Background="Aquamarine" HorizontalAlignment="Center" VerticalAlignment="Center" ClipToBounds="True">
    <ItemsControl x:Name="ICont" ItemsSource="{Binding}" SizeChanged="ItemsControl_SizeChanged"/>
</Canvas>

次に、parent の プロパティとプロパティをItemsControl.SizeChangedアニメーション化して、イベントに応答します。HeightWidthCanvas

private void ItemsControl_SizeChanged(object sender, SizeChangedEventArgs e)
    if (double.IsNaN(ClippingContainer.Height))
    {
        ClippingContainer.Height = e.NewSize.Height;
    }
    else
    {
        ClippingContainer.BeginAnimation(FrameworkElement.HeightProperty, new DoubleAnimation(e.NewSize.Height, new Duration(TimeSpan.FromSeconds(1))));
    }
    if (double.IsNaN(ClippingContainer.Width))
    {
        ClippingContainer.Width = e.NewSize.Width;
    }
    else
    {
        ClippingContainer.BeginAnimation(FrameworkElement.WidthProperty, new DoubleAnimation(e.NewSize.Width, new Duration(TimeSpan.FromSeconds(1))));
    }
}

注: これは簡単に独自の に変換できますUserControl。そうすることで、アニメーションが属するMeasureOverride親レイアウト コンテナーをオーバーライドして、レイアウト パスを強制的に再描画することができます。ItemsControl

これがお役に立てば幸いです。

于 2012-11-07T15:01:06.523 に答える
0
private void Grid_SizeChanged_1(object sender, SizeChangedEventArgs e)
{
    e.Handled = true;
    BeginAnimation(HeightProperty, new System.Windows.Media.Animation.DoubleAnimation(e.NewSize.Height, new Duration(TimeSpan.FromSeconds(1))));
}
于 2012-11-06T22:06:18.413 に答える
0
private void MyItemsControl_DataContextChanged(object Sender, DependencyPropertyChangedEventArgs e)
{
    BeginAnimation(HeightProperty, New DoubleAnimation(500.0, New Duration(Timespan.FromMilliseconds(500))));
}
于 2012-11-06T21:13:28.313 に答える