C# WPF:显示动画时重复使用的弹出窗口脏闪烁
我制作了一个Wpf无模式可重用窗口,显示动画。它被重新用于加载性能。然后又出现了一个新问题 首先,它是一个主窗口的代码隐藏。win1是弹出窗口的实例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
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=“折叠”。