C# WPF:显示动画时重复使用的弹出窗口脏闪烁

C# WPF:显示动画时重复使用的弹出窗口脏闪烁,c#,wpf,xaml,animation,window,C#,Wpf,Xaml,Animation,Window,我制作了一个Wpf无模式可重用窗口,显示动画。它被重新用于加载性能。然后又出现了一个新问题 首先,它是一个主窗口的代码隐藏。win1是弹出窗口的实例 public partial class MainWindow : Window { Window1 win1 = new Window1(); public MainWindow() { InitializeComponent(); } private void button1_Click(object sender

我制作了一个Wpf无模式可重用窗口,显示动画。它被重新用于加载性能。然后又出现了一个新问题

首先,它是一个主窗口的代码隐藏。win1是弹出窗口的实例

public partial class MainWindow : Window
{

    Window1 win1 = new Window1();

    public MainWindow() { InitializeComponent(); }

    private void button1_Click(object sender, RoutedEventArgs e) { win1.Owner = this; win1.Show(); }
    private void button2_Click(object sender, RoutedEventArgs e) { win1.Hide(); }
    private void Window_Closed(object sender, EventArgs e) { win1.Close(); }
}
public partial class Window1 : Window
{

    Storyboard aniShowing;

    public Window1()
    {
        InitializeComponent();
        aniShowing = (Storyboard)this.Resources["aniShowing"];
    }

    private void Window_IsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e)
    {
        if ((bool)e.NewValue == true) { this.BeginStoryboard(aniShowing); }
        else { aniShowing.Remove(this); this.Opacity = 0; }
    }
}
这是一个弹出窗口的xaml

<Window x:Class="WpfApplication4.Window1" x:Name="win"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Window1" Height="300" Width="300" ShowActivated="False" Background="#00000000" AllowsTransparency="True" WindowStyle="None" IsVisibleChanged="Window_IsVisibleChanged">
    <Window.Resources>
        <Storyboard x:Key="aniShowing" FillBehavior="Stop">
            <ParallelTimeline BeginTime="0:0:0" Duration="0:0:2">
                <DoubleAnimation Storyboard.TargetName="win" Storyboard.TargetProperty="Opacity" From="0" To="1" Duration="0:0:2"/>
            </ParallelTimeline>
        </Storyboard>

    </Window.Resources>
    <Ellipse Fill="Red"/>
</Window>
我想在视窗显示动画。它工作得很好。但这只是第一次

在第二次播放中,win1在短时间内显示为闪烁,并播放动画

第三次,第四次看起来也像第二次


我怎么才能摆脱这种神秘的眨眼呢?

我猜你的问题实际上是,你没有一个动画会从上述窗口淡出,所以当点击按钮1时,它会播放动画

Storyboard.TargetProperty="Opacity" From="0" To="1"
无论它处于何种状态,它都将从0变为1,如果动画已经处于1,则会看到一个“闪烁”将其设置为0,然后才能应用动画

要消除它,请在窗口关闭时执行反向动画(按钮2单击时不透明度从1到0)


PS:Hide()与设置
win.Visibility=Visibility.Hidden相同您没有考虑可见性。已折叠。

1)我如何才能播放?2) 我已经为rid blink添加了以下代码:aniShowing.Remove(这个);这个。不透明度=0;但它不起作用。订阅关闭事件,让它运行一个故事板,将不透明度从1设置为0。不!win1在隐藏时未引发关闭事件。因为它使用Hide()方法而不是Close(),以便重用。这是我订阅IsVisibleChanged事件的一个原因。实际上,我的坏消息是,在Property=“win.Visibility”Value=“Hidden”上使用触发器并使其运行故事板。而它没有执行吗?请尝试Value=“折叠”。