Duration
プロパティーColorAnimation
とValue
プロパティーをSlider
のようにバインドする方法については、ここでgood explanationが見つかりました。コンバータを使用して、にDouble
の値を変換し、Duration
をColorAnimation
に設定したBinding
に変換します。ここでは、省略、それがどのように動作するかです:ControlTemplateのアニメーションの長さにデータバインディングを使用できますか?
<Window.Resources>
<local:DoubleToDurationConverter x:Key="DoubleToDurationConverter" />
</Window.Resources>
<Slider x:Name="slider" />
<Button Content="Click me for an animation">
<Button.Triggers>
<EventTrigger RoutedEvent="Button.Click">
<BeginStoryboard>
<Storyboard>
<ColorAnimation To="Green"
Storyboard.TargetProperty="(Button.Background).(SolidColorBrush.Color)"
FillBehavior="Stop"
Duration="{Binding ElementName=slider,
Path=Value,
Mode=OneWay,
Converter={StaticResource DoubleToDurationConverter}}" />
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Button.Triggers>
</Button>
私はそれを試してみました、それは私のためにうまく働きました。しかし、私がしたいのはDuration
を私のカスタムコントロールに追加したFadeTime
という依存関係のプロパティにバインドすることです。だから、そのコントロールのControlTemplate
私が持っている中で、この:
<ControlTemplate.Triggers>
<Trigger Property="IsLit" Value="true">
<Trigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetName="glow"
Storyboard.TargetProperty="Opacity"
To="1"
Duration="{Binding FadeTime, Mode=OneWay,
RelativeSource={RelativeSource TemplatedParent}}"/>
</Storyboard>
</BeginStoryboard>
</Trigger.EnterActions>
</Trigger>
</ControlTemplate.Triggers>
これはコンパイルが、私は実行時にエラーメッセージを与える:
はと、InvalidOperationException:スレッド間での使用のために、このストーリーボードのタイムラインツリー を凍結することはできませんが。
は、どのように私はカスタムコントロールのControlTemplate
で依存変数に私のDoubleAnimation
のDuration
をバインドすることができますか?
ありがとうございます!
UPDATE
データ・バインディングは、実際に私が何をしたいの売上総やり過ぎです。実際のデータバインディングは、プロパティの値が実行時に変更されるようにします。私が本当に欲しいのは、ControlTemplate
を編集することなく、デザイン時にDoubleAnimation
のDuration
をカスタムコントロールを使って設定できる開発者のための方法です。開発者が選択した値が実行時に決して変更されない場合は、大丈夫です。
これはよく見えます。私はそれを試してみます! –
@ mm8で完璧に作業しました!残念ながら、これを行うための(明らかに)純粋なXAMLの方法はありませんが、おそらく "XAML、XAMLだけ"という絶対的なものではないはずです。大きな助けをありがとう! –