私はカスタム(複雑なもの)TabControl
を持っています。それは、多くの情報源を集めたものであり、自分の望む機能を集めたものです。 TabControlのヘッダを表示するのはカスタムPanel
です。その機能は、最小値に達するまでTabItems
のサイズを圧縮した後、スクロール機能をアクティブにします(Panel内で再び機能します)。 TabItems
(これは「新しいタブ」ボタンです)の右側に表示される1つのボタンを保持する別のカスタムパネルもあります。アニメーション化(WPF)時にカスタムパネルレイアウトが正常に動作しない
スクロールをアニメーション化しようとするまで、すべてがうまくいきます。 CustomTabPanelで
(C位、Panel
をオーバーライドし、IScrollInfo
を実施):
private readonly TranslateTransform _translateTransform = new TranslateTransform();
public void LineLeft()
{
FirstVisibleIndex++;
var offset = HorizontalOffset + _childRects[0].Width;
if (offset < 0 || _viewPort.Width >= _extent.Width)
offset = 0;
else
{
if (offset + _viewPort.Width > _extent.Width)
offset = _extent.Width - _viewPort.Width;
}
_offset.X = offset;
if (_scrollOwner != null)
_scrollOwner.InvalidateScrollInfo();
//Animate the new offset
var aScrollAnimation = new DoubleAnimation(_translateTransform.X, -offset,
new Duration(this.AnimationTimeSpan), FillBehavior.HoldEnd) { AccelerationRatio = 0.5, DecelerationRatio = 0.5 };
aScrollAnimation.Completed += ScrollAnimationCompleted;
_translateTransform.BeginAnimation(TranslateTransform.XProperty, aScrollAnimation , HandoffBehavior.SnapshotAndReplace);
//End of animation
// These lines are the only ones needed if we remove the animation
//_translateTransform.X = -offset;
//InvalidateMeasure();
}
void ScrollAnimationCompleted(object sender, EventArgs e)
{
InvalidateMeasure();
}
_translateTransform
がコンストラクタで初期化される:再び
base.RenderTransform = _translateTransform;
ここ
は、いくつかの関連のスニペットであります、私はアニメーションの部分を削除し、コメント行に置き換えるだけですべての問題はありません終わり。問題はアニメーション自体ではないことも指摘しておきます。その部分はうまくいく。問題は、いくつかのタブ項目を削除したときです。すべてのレイアウトが上になります。 TranslateTransformationは何らかの間違った価値などを持っているようです。
ありがとうございます。