2010-03-24 39 views
8

Tôi nhận được lỗi Không thể giải quyết TargetName grdGeneral. Những gì tôi đang cố gắng làm là có một chức năng mờ dần chấp nhận một lưới và mờ dần độ mờ đến không. Tôi có hàm này được gọi trên MouseLeftButtonDown và được tải sau biểu mẫu và biểu mẫu đã tải.Không thể giải quyết TargetName - Silverlight4 C#

Gọi phai ra:

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

Các phai ra chức năng:

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(); 
     } 

Tôi đã được trên một số ít các trang web hướng dẫn và mã của tôi dường như làm theo đúng thứ tự. Tôi cũng đã được trên stackoverflow này question trước khi bạn nói repost. Câu hỏi đó phải đối phó với các mutlipage và tôi chỉ đang cố bắt đầu một hình ảnh động.

Các Stack Trace

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

Giả sử là một lỗi trong vòng Silverlight4. Đối với những người quan tâm sử dụng cách của Phil và làm việc tốt hơn là cố gắng tìm cách trong mã. http://betaforums.silverlight.net/forums/p/23517/84087.aspx –

+0

Chạy cùng một vấn đề. Tôi chắc chắn cần công cụ tạo thời gian chạy. Giải pháp là gì? Liên kết ở trên bị hỏng. –

Trả lời

3

Bạn thực sự không nên cố gắng và mã storyboards của bạn như thế này nếu bạn không hoàn toàn phải. Khi hoạt ảnh của bạn trở nên phức tạp một chút, nó sẽ khiến bạn khó chịu.

Bạn nên làm điều này trong xaml, tốt nhất là sử dụng Blend. Hãy thử điều này trong XAML của bạn:

<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> 

Trong mã của bạn phía sau, sau đó bạn sẽ gọi nó như vậy:

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

Điều đó sẽ cung cấp cho bạn những gì bạn đang tìm kiếm.

Bạn cũng nên sử dụng nút thay vì hình ảnh.

+1

Cảm ơn mã, tuy nhiên tôi sẽ có nhiều lưới và cố gắng cắt giảm mã. Đây là lý do tại sao tôi đã cố gắng để làm điều này tự động. –

1

đầu tiên, đặt tên cho <DoubleAnimationUsingKeyFrames x:name="da1Load"> trong mã đằng sau:

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

thay vì sử dụng

Storyboard.SetTargetName(da, pGrid.Name); 

thử

Storyboard.SetTarget(da, pGrid); 
+0

Cảm ơn, Eric! Điều này làm việc hoàn hảo! :-) –

Các vấn đề liên quan