¿Por qué la doble animación no funciona en mainwindow.load? Wpf VB.NET

programación


Hola.
En mi programa diseñado, las páginas cambian con un efecto de desvanecimiento que cambia la OpacityProperty en DoubleAnimation.

Pero me sorprendió por qué DoubleAnimation no funciona en MainWindow.Loaded.
Quiero decir, al inicio del programa, no funciona.
¿Alguna idea por favor?

Debo agregar que copio/pego el siguiente código debajo de un botón. Funcionó bien. Pero al iniciar el programa, no funciona.

Lo que he probado:

XML
Private Sub New()
        InitializeComponent()

        'Fade in MainWindow page.
        Dim DAGrid = New DoubleAnimation With {
            .From = 0.0,
            .To = 1.0,
            .FillBehavior = FillBehavior.Stop,
            .BeginTime = TimeSpan.FromSeconds(0),
            .Duration = New Duration(TimeSpan.FromSeconds(3))
        }
        Dim storyboard = New Storyboard()
        Storyboard.SetTarget(DAGrid, MainWindow)
        Storyboard.SetTargetProperty(DAGrid, New PropertyPath(OpacityProperty))
        storyboard.Children.Add(DAGrid)
        storyboard.Begin()
    End Sub

Solución 1

No funciona porque en el constructor de la clase Ventana, solo ha creado una instancia de la clase, NO ha creado el identificador de la ventana ni los objetos GDI de la ventana todavía.

Intente mover ese código de desvanecimiento al evento Cargado de la ventana.

Solución 2

¡Resuelto!

V.B.
Sub New()
    InitializeComponent()

    TheMainWindow.Opacity = 0
End Sub

Private Sub TheMainWindow_Loaded(sender As Object, e As RoutedEventArgs) Handles TheMainWindow.Loaded
    'Fade in MainWindow page.
    Dim DATheMainWindow = New DoubleAnimation With {
        .From = 0.0,
        .To = 1.0,
        .FillBehavior = FillBehavior.Stop,
        .BeginTime = TimeSpan.FromSeconds(0),
        .Duration = New Duration(TimeSpan.FromSeconds(1))
    }
    AddHandler DATheMainWindow.Completed, Sub(a, b) TheMainWindow.Opacity = 1
'TheMainWindow is the Name Property of MainWindow
'a and b is just a temporary variables and no need to declare.
    Dim storyboardTheMainWindow = New Storyboard()
    Storyboard.SetTarget(DATheMainWindow, TheMainWindow)
    Storyboard.SetTargetProperty(DATheMainWindow, New PropertyPath(OpacityProperty))
    storyboardTheMainWindow.Children.Add(DATheMainWindow)
    storyboardTheMainWindow.Begin()
End Sub

コメント

タイトルとURLをコピーしました