0

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 つあり、異なる場合があります。

これを機能させる良い方法はありますか?

ありがとう

4

1 に答える 1