2

ControlTemplate の一部として VisualStateManager によって開始された Storyboard が与えられた場合、コントロールのプロパティの変更に基づいてそのアニメーションの SpeedRatio をどのように調整しますか?

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

これは、WPF と Silverlight の両方で機能する必要があります。

いくつかの理由から、そこにバインディングを設定できないと思います。まず、Storyboard は Freezable であるため、WPF で SpeedRatio を勝手に設定することはできません。しかし、VisualStateManager によって開始された場合、SetSpeedRatio を呼び出すことはできますか?

また、その親は VisualState であるため、関連する管理 FrameworkElement が存在しないということではないでしょうか。

それで、バインディングでそれができない場合、どうすればこれを行うことができますか?

4

3 に答える 3

0

了解しました。これをバインディングで厳密に処理する方法は実際にはないようです。そのため、これを説明するために、コードビハインドでイベントをフックして、アニメーションを適切に開始/調整しました。

于 2010-09-27T17:29:41.050 に答える
0

通常、{Binding...} ではなく {TemplateBinding...} を使用しますが、これは単純で互換性のある型に対してのみ機能します。

「相対バインディング ソース」を使用して、テンプレート化されたコントロールにバインドすることもできます。これにより、型が一致しない場合に値コンバーターを使用することもできます。

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

これを WPF でテストしたことはありませんが、通常、Silverlight は機能制限のあるものです。

于 2010-08-18T19:41:36.990 に答える