У меня есть следующая анимация, которая работает как шарм:WPF Ресурсы Раскадровка Связывание
<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 конвертер абсолютно правильно, я проверил это) он просто перестает работать должным образом:
<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>
«К» значение, во время выполнения отладки, является ноль. Почему здесь не должно работать связка? Есть ли обходной путь? Ручная настройка этого значения в коде позади работает конечно ... но хорошо ...
m_MyAnimation = (Storyboard)Resources["MyKey"];
((DoubleAnimation)m_MyAnimation.Children[0]).By = ((MyClass.RealHeight - MyClass.RealWidth)/2D) + MyClass.MarginInner + MyClass.RealWidth;