Я делаю WPF-modeless-reusable окно с отображением анимации. Он был повторно использован для загрузки производительности. И тогда возникла новая проблема.
Сначала это код MainWindow. 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(); }
}
А вот 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>
... и, наконец, вот код всплывающего окна.
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; }
}
}
Я хочу показать показ анимации в Window_IsVisibleChanged. Это работает очень хорошо. Но только в первый раз.
Во второй раз win1 показывался с миганием на короткое время, и анимация воспроизводилась.
третий раз, четвертый - тоже во второй раз.
как я могу избавиться от этого таинственного моргания?