WPF自定义着色器效果属性绑定动画

时间:2012-06-18 07:53:56

标签: wpf animation storyboard

我正在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)

而不是使用故事板,我没有得到例外,但第二个图像立即弹出,动画没有播放

1 个答案:

答案 0 :(得分:0)

解决方案是使用BeginAnimation ^^

事实上,我的第二张图片的不透明度为1,动画正在后面播放 (我检查了我的OnAnimationCompleted eventHandler与转换持续时间匹配的时间是否过去了)

所以我在TargetElement不透明度上用2个DiscreteDoubleKeyFrames创建了第二个动画来完成这个技巧,现在它可以正常工作^^

如果我在PropertyPath中添加命名空间但是我没有时间测试它可能会有效,如果你想要试试它,并更新帖子^^。