私は魅力のように機能する次のアニメーションを持っています:
<Window.Resources>
<Namespace:MathConverter Core:Key="MathConverter"/>
<Storyboard Core:Key="MyKey" Completed="OnCompleted">
<DoubleAnimation Storyboard.TargetProperty="(Canvas.Left)" BeginTime="00:00:00.0" By="135" Duration="00:00:0.2"/>
<DoubleAnimation Storyboard.TargetProperty="(FrameworkElement.RenderTransform).(TransformGroup.Children)[1].(ScaleTransform.ScaleX)" BeginTime="00:00:00.2" Duration="00:00:00.1" To="0">
<DoubleAnimation.EasingFunction>
<QuinticEase EasingMode="EaseInOut"/>
</DoubleAnimation.EasingFunction>
</DoubleAnimation>
</Storyboard>
</Window.Resources>
今...私のレイアウトは、いくつかの特定の基本値に基づいて動的に構築されています。また、アニメーションも同じように動作するようにしたいと思います。問題は、宣言を次のように変更すると(MultiBinding Converterの戻り値は完全に正しいので、再確認しました)、正しく機能しなくなることです。
<Storyboard Core:Key="MyKey" Completed="OnCompleted">
<DoubleAnimation Storyboard.TargetProperty="(Canvas.Left)" BeginTime="00:00:00.0" Duration="00:00:0.2">
<DoubleAnimation.By>
<MultiBinding Converter="{StaticResource MathConverter}" ConverterParameter="((x - y) / 2) + z + w">
<Binding Source="{Core:Static Namespace:MyClass.RealHeight}"/>
<Binding Source="{Core:Static Namespace:MyClass.RealWidth}"/>
<Binding Source="{Core:Static Namespace:MyClass.MarginInner}"/>
<Binding Source="{Core:Static Namespace:MyClass.RealWidth}"/>
</MultiBinding>
</DoubleAnimation.By>
</DoubleAnimation>
<DoubleAnimation Storyboard.TargetProperty="(FrameworkElement.RenderTransform).(TransformGroup.Children)[1].(ScaleTransform.ScaleX)" BeginTime="00:00:00.2" Duration="00:00:00.1" To="0">
<DoubleAnimation.EasingFunction>
<QuinticEase EasingMode="EaseInOut"/>
</DoubleAnimation.EasingFunction>
</DoubleAnimation>
</Storyboard>
実行時デバッグ時の「By」値はnullです。ここでバインドが機能しないのはなぜですか?回避策はありますか?もちろん、コードビハインドでその値を手動で設定することは機能します...しかしまあ...
m_MyAnimation = (Storyboard)Resources["MyKey"];
((DoubleAnimation)m_MyAnimation.Children[0]).By = ((MyClass.RealHeight - MyClass.RealWidth) / 2D) + MyClass.MarginInner + MyClass.RealWidth;