2012-04-04 63 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

就这么简单!