3 つの状態の間でアニメーション化したいユーザー コントロールを持つ WPF C# アプリケーションがあります。
ユーザー コントロール:
public partial class Cart : UserControl
{
/// <summary>
/// The <see cref="Layout" /> dependency property's name.
/// </summary>
public const string LayoutPropertyName = "Layout";
/// <summary>
/// Gets or sets the value of the <see cref="Layout" />
/// property. This is a dependency property.
/// </summary>
public Visibility Layout
{
get
{
return (Visibility)GetValue(LayoutProperty);
}
set
{
SetValue(LayoutProperty, value);
}
}
public static readonly DependencyProperty LayoutProperty = DependencyProperty.Register(
LayoutPropertyName,
typeof(Visibility),
typeof(Carrito),
new PropertyMetadata(Visibility.Hidden));
}
また、Styles.xaml を使用して、プロパティ トリガーを使用して再利用し、コントロールをさまざまな位置に配置する予定の 3 つのストーリーボードを定義します。
<Storyboard x:Key="CartVisible">
<ThicknessAnimation Storyboard.TargetProperty="Margin" Duration="0:0:0.5" To="0,648,0,0" />
</Storyboard>
<Storyboard x:Key="CartCollapsed">
<ThicknessAnimation Storyboard.TargetProperty="Margin" Duration="0:0:0.5" To="0,736,0,0" />
</Storyboard>
<Storyboard x:Key="CartHidden">
<ThicknessAnimation Storyboard.TargetProperty="Margin" Duration="0:0:0.5" To="0,768,0,0" />
</Storyboard>
<Style TargetType="c:Cart" TargetType="FrameworkElement">
<Setter Property="Margin" Value="0,768,0,0" />
<Style.Triggers>
<Trigger Property="Layout" Value="Visible">
<Trigger.EnterActions>
<BeginStoryboard Storyboard="{StaticResource CartVisible}" />
</Trigger.EnterActions>
<Trigger.ExitActions>
<BeginStoryboard Storyboard="{StaticResource CartHidden}" />
</Trigger.ExitActions>
</Trigger>
<Trigger Property="Layout" Value="Collapsed">
<Trigger.EnterActions>
<BeginStoryboard Storyboard="{StaticResource CartCollapsed}" />
</Trigger.EnterActions>
<Trigger.ExitActions>
<BeginStoryboard Storyboard="{StaticResource CartVisible}" />
</Trigger.ExitActions>
</Trigger>
<Trigger Property="Layout" Value="Hidden">
<Trigger.EnterActions>
<BeginStoryboard Storyboard="{StaticResource CartHidden}" />
</Trigger.EnterActions>
<Trigger.ExitActions>
<BeginStoryboard Storyboard="{StaticResource CartVisible}" />
</Trigger.ExitActions>
</Trigger>
</Style.Triggers>
</Style>
次に、プロパティ値の変更をトリガーするプロパティ Layout への xaml バインディングがあります。
問題は、状態が変化するたびにアニメーションが常に機能するとは限らないことです。私が見たすべての例は、Enter および ExitActions を使用した bool プロパティのものですが、ここでは 3 つあり、異なる場合があります。
これを機能させる良い方法はありますか?
ありがとう