2012-04-04 6 views
0

У меня есть пользовательский (и становится сложным) 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, похоже, держится за какую-то неправильную ценность или что-то в этом роде.

Заранее спасибо.

ответ

0

Хорошо. Как это часто бывает, я продолжал работать над этим, и ... ответил сам.

Может быть полезен и для других людей, поэтому здесь был улов. В строке:

var aScrollAnimation = new DoubleAnimation(_translateTransform.X, -offset, new Duration(this.AnimationTimeSpan), FillBehavior.HoldEnd) 
    { AccelerationRatio = 0.5, DecelerationRatio = 0.5 }; 

FillBehavior должен был FillBehavior.Stop.

Как легко!

Смежные вопросы