C# wpf淡入动画只工作一次

C# wpf淡入动画只工作一次,c#,wpf,animation,C#,Wpf,Animation,我已经创建了淡入淡出动画,由viewmodel中的属性更改触发。第一次淡入淡出时效果良好,但每次我重复此操作时,只显示淡出,这意味着控件将保持不可见,直到它闪烁到不透明度1,然后淡出 XAML: 和调用(调试): “我在干什么呢?”处理完故事板后,您需要删除它们。比如: ... (与淡出相同,给它一个名称) 或者,您也可以在退出按钮上执行此操作: ... 否则,最后一个情节提要将继续“推送”其最后一个值,因此您不会看到任何更改您需要在处理完情节提要后删除它们。比如: ... (与淡出

我已经创建了淡入淡出动画,由viewmodel中的属性更改触发。第一次淡入淡出时效果良好,但每次我重复此操作时,只显示淡出,这意味着控件将保持不可见,直到它闪烁到不透明度1,然后淡出

XAML:

和调用(调试):


“我在干什么呢?”

处理完故事板后,您需要删除它们。比如:


...
(与淡出相同,给它一个名称)

或者,您也可以在退出按钮上执行此操作:


...

否则,最后一个情节提要将继续“推送”其最后一个值,因此您不会看到任何更改

您需要在处理完情节提要后删除它们。比如:


...
(与淡出相同,给它一个名称)

或者,您也可以在退出按钮上执行此操作:


...

否则,最后一个情节提要将继续“推送”其最后一个值,这样您就不会看到任何更改

只想注释名称必须位于
-Tag^^thx处对于您的答案,效果完美只想注释名称必须位于
-Tag^^thx处对于您的答案,效果完美
<DataTemplate x:Key="MessageTemplate">
    <DataTemplate.Triggers>
        <DataTrigger Binding="{Binding FadeInAnimationState}" Value="Active">
            <DataTrigger.EnterActions>
                <BeginStoryboard>
                    <Storyboard>
                        <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="Opacity">
                            <EasingDoubleKeyFrame KeyTime="0" Value="0"/>
                            <EasingDoubleKeyFrame KeyTime="0:0:0.25" Value="1"/>
                        </DoubleAnimationUsingKeyFrames>
                    </Storyboard>
                </BeginStoryboard>
            </DataTrigger.EnterActions>
        </DataTrigger>
        <DataTrigger Binding="{Binding FadeOutAnimationState}" Value="Active">
            <DataTrigger.EnterActions>
                <BeginStoryboard>
                    <Storyboard>
                        <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="Opacity">
                            <EasingDoubleKeyFrame KeyTime="0" Value="1"/>
                            <EasingDoubleKeyFrame KeyTime="0:0:1" Value="0"/>
                        </DoubleAnimationUsingKeyFrames>
                    </Storyboard>
                </BeginStoryboard>
            </DataTrigger.EnterActions>
        </DataTrigger>
    </DataTemplate.Triggers>
    <StatusBarItem>
        ...
    </StatusBarItem>
</DataTemplate>
...
<ContentPresenter ContentTemplate="{StaticResource MessageTemplate}" Content="{Binding}"/>
private DisplayState _messageState;
private DisplayState MessageState
{
    get { return _messageState; }
    set
    {
        _messageState = value;
        if (value == DisplayState.Displayed)
        {
            FadeOutAnimationState = AnimationState.Inactive;
            FadeInAnimationState = AnimationState.Active;
        }
        else
        {
            FadeInAnimationState = AnimationState.Inactive;
            FadeOutAnimationState = AnimationState.Active;
        }
    }
}

public AnimationState FadeInAnimationState
{
    ... // getter and setter with NotfiyPropertyChanged
}

public AnimationState FadeOutAnimationState
{
    ... // getter and setter with NotfiyPropertyChanged
}
MessageState = DisplayState.Displayed;
await Task.Delay(duration);
MessageState = DisplayState.Hidden;
await Task.Delay(TimeSpan.FromSeconds(1));