私は、valuechange でアニメーションを実装する Progressbar から派生したカスタム コントロールを作成しました (値は、ターゲットに到達するまで doubleanimation でいっぱいになります)。
var duration = new Duration(TimeSpan.FromSeconds(2.0));
var doubleanimation = new DoubleAnimation(value, duration)
{
EasingFunction = new BounceEase()
};
BeginAnimation(ValueProperty, doubleanimation);
ProgressBar に使用される ControlTemplate は、変更後すぐに新しい値を表示する必要があるため、新しいプロパティ「TargetValue」が使用されます。このために、ProgressEx には以下が含まれます。
public static readonly DependencyProperty TargetValueProperty = DependencyProperty.Register("TargetValue", typeof (int), typeof (ProgressEx), new FrameworkPropertyMetadata(0));
public int TargetValue
{
get { return (int)GetValue(TargetValueProperty); }
set
{
if (value > Maximum)
{
//Tinting background-color
_oldBackground = Background;
Background = FindResource("DarkBackgroundHpOver100") as LinearGradientBrush;
}
else
{
if (_oldBackground != null)
Background = _oldBackground;
}
SetValue(TargetValueProperty, value);
Value = value;
}
}
TargetValue が最大値を超えると、xaml で定義された別の色が使用されます。これは非常にうまく機能します - しかし。今、私はこのバーをいくつかのデータにバインドされているリストビューで使用したいと考えています。問題は、この場合セッターが呼び出されないため、TargetValue={Binding ProgressValue} を介して値が変更された場合でも、アニメーションが実行されないことです。フレームワークは常に GetValue と SetValue を直接呼び出し、ロジックを提供する必要がないことはわかっていますが、これを回避する方法はありますか?
前もって感謝します。