WPF アプリケーションでトランジションを実装しています。
最初に、2 つの FrameworkElement を 2 つの ImageBrush に「保存」します。次に、シェーダー Effect の Input & Back (Brush) プロパティを設定します。
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 を取得します。
「プロパティ パス '(Effect).(CustomEffect.Time)' 内のすべてのプロパティ参照を解決できません。
該当するオブジェクトがプロパティをサポートしていることを確認してください。」
しかし、BlurEffect のような組み込みのエフェクトを使用すると、機能します....
誰かが私が間違っている場所を教えてもらえますか?
編集:
私も試しました
SourceElement.Effect.BeginAnimation(SlideInEffect.TimeProperty, refDoubleAnimation)
ストーリーボードを使用する代わりに、例外は発生しませんが、2 番目の画像がすぐにポップされ、アニメーションが再生されません