애니메이션을 보여주는 Wpf-modeless-reusable 창을 만듭니다. 그것은 성능 로딩을 위해 재사용되었습니다. 그리고 나서 새로운 문제가 발생했습니다.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(); }
}
그리고
은 ...<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>
팝업 윈도우의 XAML ... 그리고 마지막으로, 여기에 팝업 창 뒤에 코드입니다.
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) 어떻게 반전 애니 쇼를 재생할 수 있습니까? 2) 이미 깜박임 제거를위한 다음 코드를 추가했습니다. aniShowing.Remove (this); this.Opacity = 0; 그러나 그것은 작동하지 않습니다. – mjk6026
Closing 이벤트를 구독하고 불투명도를 1에서 0으로 설정하는 스토리 보드를 실행하게하십시오. –
아니요! 숨을 닫을 이벤트를 제기하지 않습니다. 재사용을 위해 Close() 대신 Hide() 메서드를 사용하기 때문입니다. IsVisibleChanged 이벤트를 구독하는 이유입니다. – mjk6026