【解決方法】 mainwindow.load で doubleanimation が機能しないのはなぜですか? WPF VB.NET

プログラミングQA


こんにちは。
私の設計したプログラムでは、DoubleAnimation の OpacityProperty を変更するフェード効果でページが変更されます。

しかし、なぜ DoubleAnimation が MainWindow.Loaded で動作しないのかに驚きました。
つまり、プログラムの開始時点では機能しません。
何かアイデアはありますか?

以下のコードをコピーしてボタンの下に貼り付けることを付け加えておきます。 うまくいきました。 しかし、プログラムを開始すると機能しません。

私が試したこと:

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

解決策 1

Window クラスのコンストラクターでは、クラスのインスタンスを作成しただけで、ウィンドウ ハンドルやウィンドウ GDI オブジェクトさえもまだ作成していないため、これは機能しません。

そのフェード コードをウィンドウの Loaded イベントに移動してみてください。

解決策 2

解決しました!

VB
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をコピーしました