无法解析TargetName-Silverlight4 C#
我收到错误无法解析TargetName grdGeneral。我想做的是有一个淡出函数,它接受一个网格并将不透明度淡出到零。我在MouseLeftButtonDown上调用了这个函数,它是在xaml和表单加载之后加载的 调用淡出:无法解析TargetName-Silverlight4 C#,c#,silverlight,animation,silverlight-4.0,C#,Silverlight,Animation,Silverlight 4.0,我收到错误无法解析TargetName grdGeneral。我想做的是有一个淡出函数,它接受一个网格并将不透明度淡出到零。我在MouseLeftButtonDown上调用了这个函数,它是在xaml和表单加载之后加载的 调用淡出: private void imgNext_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) { fadeOut(grdGeneral);
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上。这个问题需要处理多个动画,我只是想开始一个动画
堆栈跟踪
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:
你真的不应该尝试这样编写你的故事板,如果你不一定要这样做的话。一旦你的动画变得有点复杂,它就会咬你 您应该改为在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>
这会给你你想要的
最好使用按钮而不是图像。首先,命名
在代码隐藏中:
da1Load.SetValue(Storyboard.TargetNameProperty, "grdWithNewName")
而不是使用
Storyboard.SetTargetName(da, pGrid.Name);
试一试
谢谢你的代码,不过我将有多个网格,并试图减少代码。这就是为什么我尝试动态地做这件事。可能是Silverlight4中的一个bug。对于那些有兴趣使用Phil的方法的人来说,它比试图在代码中找到方法更有效。遇到了同样的问题。我肯定需要运行时创建的东西。解决办法是什么?上面的链接断了。
Storyboard.SetTargetName(da, pGrid.Name);
Storyboard.SetTarget(da, pGrid);