でラップすることで、(私が思うに)あなたが求めている効果を作成でき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
アニメーション化して、イベントに応答します。Height
Width
Canvas
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
これがお役に立てば幸いです。