У меня есть пользовательский (и становится сложным) TabControl
. Это сбор многих источников, а также мои собственные функции. В нем настраивается Panel
, чтобы показать заголовки TabControl. Его функции состоят в том, чтобы сжать размер TabItems
, пока они не достигнут своего минимума, а затем активирует функции прокрутки (снова на панели). Существует также еще одна настраиваемая панель для удерживания одной кнопки, которая отображается справа от TabItems
(это кнопка «новая вкладка»).Пользовательская компоновка панели не работает должным образом при анимации (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, похоже, держится за какую-то неправильную ценность или что-то в этом роде.
Заранее спасибо.