2010-03-24 5 views
8

오류가 발생합니다. TargetName을 확인할 수 없습니다. grdGeneral. 내가 뭘 하려는지 모눈을 받아들이고 불투명도를 0으로 페이드 아웃하는 기능이 있습니다. MouseLeftButtonDown에서 호출 된이 함수가 있고 xaml 및 폼이로드 된 후 이로드되었습니다.TargetName을 확인할 수 없습니다. - Silverlight4 C#

페이드를 호출 :

private void imgNext_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
     { 
      fadeOut(grdGeneral);    
     } 

페이드 아웃 기능 :

private void fadeOut(Grid pGrid) 
     { 
      Storyboard stb = new Storyboard(); 

      DoubleAnimation da = new DoubleAnimation(); 
      da.From = 1.0; 
      da.To = 0.0; 

      stb.Duration = new Duration(TimeSpan.FromSeconds(.75)); 
      stb.Children.Add(da); 

      Storyboard.SetTargetName(da, pGrid.Name); 
      Storyboard.SetTargetProperty(da, new PropertyPath(Grid.OpacityProperty)); 

      stb.Begin(); 
     } 

내가 튜토리얼 사이트의 소수에왔다 내 코드가 같은 순서를 따라야 할 것 같다. 나는 또한 당신이 재 게시를 말하기 전에이 stackoverflow에 question되었습니다. 그 질문은 mutlipages를 다루어야하고 나는 애니메이션을 시작하려고합니다.

스택 추적

System.InvalidOperationException was unhandled by user code 
    Message=Cannot resolve TargetName grdGeneral. 
    StackTrace: 
     at MS.Internal.XcpImports.MethodEx(IntPtr ptr, String name, CValue[] cvData) 
     at MS.Internal.XcpImports.MethodEx(DependencyObject obj, String name) 
     at System.Windows.Media.Animation.Storyboard.Begin() 
     at MeterTesting.QuarterReportGUI.fadeOut(Grid pGrid) 
     at MeterTesting.QuarterReportGUI.imgNext_MouseLeftButtonDown(Object sender, MouseButtonEventArgs e) 
     at MS.Internal.CoreInvokeHandler.InvokeEventHandler(Int32 typeIndex, Delegate handlerDelegate, Object sender, Object args) 
     at MS.Internal.JoltHelper.FireEvent(IntPtr unmanagedObj, IntPtr unmanagedObjArgs, Int32 argsTypeIndex, String eventName) 
    InnerException: 
+0

기발한 Silverlight4 내 버그를 시도해보십시오. Phil의 방법을 사용하여 관심있는 사람들을 위해 코드에서 길 찾기를 시도하는 것보다 효과적입니다. http://betaforums.silverlight.net/forums/p/23517/84087.aspx –

+0

같은 문제가 있습니다. 나는 런타임 생성 된 것들을 확실히 필요로한다. 해결책은 무엇입니까? 위의 링크가 깨졌습니다. –

답변

3

당신은 정말해서는 안되는과 같은 코드 스토리 보드는 당신이 절대적으로 필요하지 않은 경우. 애니메이션이 조금 복잡해지면 당신을 물 듭니다.

xaml에서 대신 Blend를 사용하여이 작업을 수행해야합니다. 당신의 XAML이 시도 : 코드에서

<UserControl.Resources> 
    <Storyboard x:Name="FadeGrid"> 
     <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="grdGeneral"> 
      <EasingDoubleKeyFrame KeyTime="0" Value="1"/> 
      <EasingDoubleKeyFrame KeyTime="0:0:0.7" Value="0"/> 
     </DoubleAnimationUsingKeyFrames> 
    </Storyboard> 
</UserControl.Resources> 

<Grid x:Name="grdGeneral" Background="White"> 
    <Image x:Name="imgNext" MouseLeftButtonDown="imgNext_MouseLeftButtonDown" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Source="/StoryboardInCode;component/Images/avatar.jpg"></Image> 
</Grid> 

을 뒤에, 당신은 다음과 같이 그것을 호출하는 것입니다 : 당신이 찾고있는 무엇을 제공해야

private void imgNext_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
    { 
     FadeGrid.Begin(); 
    } 

.

이미지 대신 버튼을 사용하는 것이 좋습니다.

+1

코드를 보내 주셔서 감사합니다. 그러나 여러 개의 그리드가 있고 코드를 줄이려고했습니다. 이것이 내가 이것을 동적으로하려는 이유입니다. –

1

첫째, 뒤에 코드에서 <DoubleAnimationUsingKeyFrames x:name="da1Load"> 이름 :

da1Load.SetValue(Storyboard.TargetNameProperty, "grdWithNewName") 
5

대신을

Storyboard.SetTargetName(da, pGrid.Name); 

Storyboard.SetTarget(da, pGrid); 
+0

고마워, 에릭! 이것은 완벽하게 작동했습니다! :-) –

관련 문제