我正在WPF应用程序中实现转换。
首先,我将2个FrameworkElement“保存”在2个ImageBrush中。 然后我设置输入&我的着色器效果的Back(画笔)属性。
CustomEffect s = new CustomEffect();
RenderTargetBitmap rtb = new RenderTargetBitmap((int)SourceFrameWorkElement.ActualWidth, (int)SourceFrameWorkElement.ActualHeight, 96, 96, PixelFormats.Pbgra32);
rtb.Render(SourceFrameWorkElement);
ImageBrush ib = new ImageBrush(rtb);
s.Input = ib;
rtb.Render(TargetFrameWorkElement);
ib.ImageSource = rtb;
s.Back = ib;
SourceFrameWorkElement.Effect = s;
现在已经设置了所有内容,我想设置着色器的Time属性的动画,我试过这个:
DoubleAnimation refDoubleAnimation = new DoubleAnimation(0.0, 1.0, Duration);
Storyboard.SetTarget(refDoubleAnimation, SourceFrameWorkElement);
Storyboard.SetTargetProperty(refDoubleAnimation, new PropertyPath("(Effect).(CustomEffect.Time)");
refStoryboard.Children.Add(refDoubleAnimation);
refStoryboard.Completed += new EventHandler(OnStoryboardCompleted);
refStoryboard.Begin(SourceFrameWorkElement, true);
我在begin方法上收到一条带有此消息的InvalidOperationException:
“无法解析属性路径中的所有属性引用”(效果)。(CustomEffect.Time)' 验证适用的对象是否支持这些属性。“
但是当我使用像BlurEffect这样的内置效果时,它可以工作....
有人能告诉我我哪里错了吗?
修改
我也试过了
SourceElement.Effect.BeginAnimation(SlideInEffect.TimeProperty, refDoubleAnimation)
而不是使用故事板,我没有得到例外,但第二个图像立即弹出,动画没有播放
答案 0 :(得分:0)
解决方案是使用BeginAnimation ^^
事实上,我的第二张图片的不透明度为1,动画正在后面播放 (我检查了我的OnAnimationCompleted eventHandler与转换持续时间匹配的时间是否过去了)
所以我在TargetElement不透明度上用2个DiscreteDoubleKeyFrames创建了第二个动画来完成这个技巧,现在它可以正常工作^^
如果我在PropertyPath中添加命名空间但是我没有时间测试它可能会有效,如果你想要试试它,并更新帖子^^。