2016-09-13 10 views
0

私はWPFを使用してビデオトラックバーを作成しようとしています.Youtubeのような標準的なトラックバーをエミュレートする目的で、ユーザーは親指を新しい位置にドラッグして移動しながらビデオの位置をリアルタイムで更新できます。長方形のマージンをアニメーションに悪い方法に変更していますか?

現在ビデオの現在のフレームが変更された時点を検出してサムの(左)マージン(フレーム数* pixelsPerFrame)を計算するディスパッチャータイマーがビデオプレーヤーにあります。 スライダーでユーザーのマウスを押すと、ビデオが一時停止し、マウスのX位置が追跡され、フレームにマップされ、ビデオの現在の位置が設定されます。

動きはやや跳ね上がっています(再生がうまくいき、スライダが動いていることが奇妙です)、スライダの最後に向かって矩形(サム)が歪んでいます。それはより薄くなり、いくつかの時間は実際に消える。

このマージンを使用してスライダをアニメートすると効率が悪く、このような(インタラクティブな)アニメーションを実現するにはより良い方法がありますか?

答えて

2

はい、Marginプロパティで親指をアニメートすると、コントロールのレイアウトを再計算し、更新があるたびに再描画する必要があるため、非常に非効率的です。

WPFでビジュアルをアニメートするより効率的な方法は、アイテムのRenderTransformプロパティに添付されたTranslateTransformを使用することです。 TranslateTransformXYプロパティを変更すると、高価なレイアウトの再計算を行わずに、アイテムの画面の場所がただちに変更されます。これらのプロパティの中で最も良いのはDependencyPropertyです。そのため、ビュー内のプロパティにデータをバインドすることができます。

関連する問題