0
我製作了一個Wpf-modeless-可重用窗口並顯示動畫。它被重新用於加載性能。然後出現了一個新問題。WPF:眨眼的重用彈出窗口顯示動畫的窗口
起初,它是一個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短暫閃爍,動畫被播放。
第三次,第四次看起來也是第二次。
我該如何擺脫這個神祕的眨眼?
1)我該如何玩逆轉aniShow? 2)我已經添加下面的代碼來擺脫眨眼:aniShowing.Remove(this); this.Opacity = 0;但它不起作用。 – mjk6026
訂閱Closing事件,並使其運行故事板,將Opacity從1設置爲0. –
不! win1不能提高隱藏的關閉事件。因爲它使用Hide()方法而不是Close()來重用。這是我訂閱IsVisibleChanged事件的原因。 – mjk6026