在WPF中2个Windows之间的淡入淡出过渡

时间:2020-08-03 10:16:50

标签: wpf vb.net animation

下面是我在WPF中创建到窗口之间的淡入/淡出过渡的尝试,但是我不明白TransitionStoryboard.Begin()方法需要什么作为参数。通过为该方法提供传入的窗口之一的实例,我已经能够淡入/淡出一个窗口,但不知道如何在两个窗口中均通过它。 MS文档讨论了类型为FrameworkContentElement或设置为TargetName的“包含对象”,但是...我被卡住了!

感谢您提供的任何帮助。

Imports System.Runtime.CompilerServices
Imports System.Windows.Media.Animation


<Assembly: InternalsVisibleTo("ApplicationStartingTests")>


Friend Module WindowFadeTransition
    Friend Sub Transition(from As Window,
                          [to] As Window)

        ConfigureFromAnimation(from)
        ConfigureToAnimation([to])

        PlayTransition()
    End Sub


    Private Sub ConfigureFromAnimation(from As DependencyObject)
        Const invisible As Double = 0
        Dim fadeOutAnimation As New DoubleAnimation

        With fadeOutAnimation
            .To = invisible
            .Duration = Duration
        End With

        TransitionStoryboard.Children.Add(fadeOutAnimation)
        Storyboard.SetTarget(from,
                             fadeOutAnimation)
        Storyboard.SetTargetProperty(fadeOutAnimation,
                                     New PropertyPath(UIElement.OpacityProperty))
    End Sub


    Private Sub ConfigureToAnimation([to] As DependencyObject)
        Const visible As Double = 1
        Dim fadeInAnimation As New DoubleAnimation

        With fadeInAnimation
            .To = visible
            .Duration = Duration
        End With

        TransitionStoryboard.Children.Add(fadeInAnimation)
        Storyboard.SetTarget([to],
                             fadeInAnimation)
        Storyboard.SetTargetProperty(fadeInAnimation,
                                     New PropertyPath(UIElement.OpacityProperty))
    End Sub


    Private Sub PlayTransition()
        TransitionStoryboard.Begin() '<---- What goes in here?'
    End Sub


    Private ReadOnly Property Duration As New Duration(TimeSpan.FromSeconds(0.7))

    Private ReadOnly Property TransitionStoryboard As New Storyboard
End Module

0 个答案:

没有答案