2009-03-24 9 views
0

윈도우의 "loaded"이벤트처럼 이벤트가 발생할 때 (윈도우 함수의 호출시) 윈도우의 vb 코드에서 윈도우의 XAML 파일에 선언 된 애니메이션을 트리거하려고합니다. .WPF에서 vb.net 코드에서 오류가 발생하여 애니메이션이 시작됨

Dim StartAnimation As Storyboard = DirectCast(FindName("ServiceOn"), Storyboard) 
Dim StopAnimation As Storyboard = DirectCast(FindName("ServiceOff"), Storyboard) 

그리고 여기에 실패 함수에 대한 코드입니다 : 여기

내가 (스토리 보드로) 애니메이션을 선언하는 방법

Public Function CheckStatus() As Boolean 
    If sControl.Status = ServiceControllerStatus.Running Then 
     Me.Button1.Content = "Stop" 
     Button1.BeginStoryboard(StartAnimation, HandoffBehavior.Compose, isControllable:=False) 
    ElseIf sControl.Status = ServiceControllerStatus.Stopped Then 
     Me.Button1.Content = "Start" 
     Button1.BeginStoryboard(StopAnimation, HandoffBehavior.Compose, isControllable:=False) 
    End If 
End Function 

내가지고있어 오류가있다 다음 :

"값은 null 일 수 없습니다. 매개 변수 이름 : 스토리 보드"

그것은 바로 "Button1.BeginStoryboard 후 뭔가 빠진 것 같습니다 (StartAnimation를, ...)

어떤 아이디어가?

답변

1

StartAnimation 값이 Exception이 Throw되는 Nothing 인 것처럼 보입니다. BeginStoryBoard를 호출하기 전에 이것이 아무것도 아닌지 확인해야합니다.

If StartAnimation IsNot Nothing AndAlso sControl.Status = ServiceControllerStatus.Running Then 
    Me.Button1.Content = "Stop" 
    Button1.BeginStoryBoard(StartAnimation, HandoffBehavior.Compose) 
... 
+0

이 최종 코드 (그냥 큰 workes)입니다. 이제 문제는 스토리 보드가 실제로는 전혀 달라지지 않는다는 것입니다. 단추의 내용도 마찬가지입니다. 어떤 아이디어? – TuxMeister

+0

@TuxMeister, FindName이 컨트롤을 찾지 못하는 것 같습니다. 보고있는 범위에서 이름이 올바르게 등록되었는지 확인 했습니까? – JaredPar

+0

그래, 두 스토리 보드에는 XAML 파일에 x : Class 및 x : Name 속성이 있습니다. "FindResource"를 시도 할 때 처음에는 찾지 않지만 "x : Name"을 사용하면 인식합니다. – TuxMeister

0

실제로 문제가 무엇인지 파악 : 새로운 클래스는 것을 실제로 널 = 있도록

나는 수준을 초기화에 그것을 한 애니메이션을 선언하면 이벤트가 raized했다하지 않을 때.

트릭은 선언 부분 대신 로직 코드에 붙여서 작동하도록하는 것입니다.

Imports System 
Imports System.ComponentModel 
Imports System.ComponentModel.BackgroundWorker 
Imports System.IO 
Imports System.Threading 
Imports System.Net 
Imports System.Windows 
Imports System.Windows.Controls 
Imports System.Windows.Data 
Imports System.Windows.Media 
Imports System.Windows.Media.Animation 
Imports System.Windows.Navigation 
Imports System.ServiceProcess 
Partial Public Class Window1 
    Public Sub New() 
     MyBase.New() 
     Me.InitializeComponent() 
     End Sub 
Private WithEvents worker As New BackgroundWorker 
Dim sControl As New ServiceController("Spooler") 
Private Sub Window1_Loaded(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles Me.Loaded 
    worker.WorkerReportsProgress = True 
    CheckStatus() 
End Sub 
Public Function CheckStatus() As Boolean 
    If sControl.Status = ServiceControllerStatus.Running Then 
     Dim StartAnimation As Storyboard = DirectCast(FindResource("ServiceIsStarted"), Storyboard) 
     Me.Button1.Content = "Stop" 
     Me.BeginStoryboard(StartAnimation) 
    ElseIf sControl.Status = ServiceControllerStatus.Stopped Then 
     Dim StopAnimation As Storyboard = DirectCast(FindResource("ServiceIsStopped"), Storyboard) 
     Me.Button1.Content = "Start" 
     Me.BeginStoryboard(StopAnimation) 
    End If 
End Function 
Private Sub worker_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles worker.DoWork 
    If sControl.Status = ServiceControllerStatus.Running Then 
     sControl.Stop() 
     sControl.Refresh() 
     worker.ReportProgress(100) 
    ElseIf sControl.Status = ServiceControllerStatus.Stopped Then 
     sControl.Start() 
     sControl.Refresh() 
     worker.ReportProgress(100) 
    End If 
End Sub 
Private Sub worker_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles worker.ProgressChanged 
    If sControl.Status = ServiceControllerStatus.Running Then 
     Dim StartAnimation As Storyboard = DirectCast(FindResource("ServiceIsStarted"), Storyboard) 
     Me.Button1.Content = "Stop" 
     Me.BeginStoryboard(StartAnimation) 
    ElseIf sControl.Status = ServiceControllerStatus.Stopped Then 
     Dim StopAnimation As Storyboard = DirectCast(FindResource("ServiceIsStopped"), Storyboard) 
     Me.Button1.Content = "Start" 
     Me.BeginStoryboard(StopAnimation) 
    End If 
End Sub 
Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles Button1.Click 
    worker.RunWorkerAsync() 
End Sub 

최종 클래스 이제 더 이상 오류가 해냈어

관련 문제