Почему значение раскадровки не будет получено из ресурса или привязки?

У меня есть конструкция ниже, и она работает:

 <Storyboard x:Key="GrowOnStart">
   <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(Canvas.Left)" Storyboard.TargetName="window">
            <EasingDoubleKeyFrame KeyTime="0" Value="1024"/>

Почему это не работает, если я попробую что-то вроде этого:

  <EasingDoubleKeyFrame KeyTime="0" Value="{DynamicResource StartingPositionLeft}"/>

И да, я определил ресурс перед раскадровкой. И утверждение, подобное следующему, тоже не сработает:

 <EasingDoubleKeyFrame KeyTime="0" Value="{Binding StartingPositionLeft}"/>

И да, это общедоступное свойство исходного кода, и для this.DataContext задано значение this.


person iLemming    schedule 05.08.2010    source источник


Ответы (1)


Это связано с тем, что анимации являются замораживаемыми объектами. Дополнительную информацию можно найти в документации MSDN, но в основном это означает, что вы нельзя использовать привязку, потому что свойства замороженного объекта (например, анимация) не могут измениться.

Чтобы обойти это ограничение, вам нужно будет выполнять часть или всю работу в коде программной части.

person Wonko the Sane    schedule 05.08.2010
comment
Да, кажется, единственный способ редактировать раскадровку в коде позади. var sb = (Раскадровка) Ресурсы [GrowOnStart]; var anim = (DoubleAnimationUsingKeyFrames)sb.Children[0]; аним.KeyFrames[0].Value = 100; - person iLemming; 05.08.2010
comment
В коде позади вы должны иметь возможность получить значение, к которому вы хотите привязаться (вместо того, чтобы делать жестко закодированные значения). Например, используя ваши примеры, вы можете сделать что-то вроде anim.KeyFrames[0].Value = this.StartingPositionLeft (или любое другое свойство, к которому вы хотите привязаться), или вы можете использовать FindResource, чтобы найти и получить значение любого DynamicResource ( или StaticResource), которые вы изначально хотели использовать. - person Wonko the Sane; 05.08.2010