Как я могу управлять SpeedRatio Storyboard внутри VisualState? - PullRequest
1 голос
/ 17 августа 2010

Учитывая, что раскадровка запущена VisualStateManager как часть ControlTemplate, как мне настроить SpeedRatio этой анимации на основе изменений свойств элемента управления?

<ControlTemplate>
  <Grid>
    <VisualStateManager.VisualStateGroups>
      <VisualStateGroup>
        <VisualState>
          <Storyboard Name="SpinningThing"
                      SpeedRatio="{Binding SpinningSpeedRatio}">
            ...

Это должно работать как в WPF, так и в WPF.Silverlight.

Не думаю, что смогу установить привязку там по ряду причин.Прежде всего, раскадровка является Freezable, поэтому вы не можете просто установить SpeedRatio в WPF.Но, если он запущен VisualStateManager, могу ли я вызвать для него SetSpeedRatio?

Кроме того, поскольку его родительский объект является VisualState, не означает ли это, что не будет никакого управляющего FrameworkElement, к которому он будет относиться?*

Итак, если я не могу сделать это с привязкой, как это можно сделать?

Ответы [ 2 ]

0 голосов
/ 27 сентября 2010

Хорошо, похоже, на самом деле нет способа справиться с этим строго с помощью привязки. Поэтому, чтобы учесть это, я подключил события в коде для запуска / настройки анимации в зависимости от ситуации.

0 голосов
/ 18 августа 2010

Обычно вы бы использовали {TemplateBinding ...} вместо {Binding ...}, но это работает только для простых, совместимых типов.

Вы также должны иметь возможность привязываться к шаблонному элементу управления, используя «относительный источник привязки» . Это также позволяет вам использовать конвертер значений, если типы не совпадают.

SpeedRation={Binding SomeProperty, RelativeSource={RelativeSource TemplatedParent}, Converter={StaticResource SomeConverter}}" 

Я не проверял это в WPF, но Silverlight, как правило, ограничен функциональностью.

...