我有一个自定义(并且变得复杂)TabControl
。这是许多来源的聚集,加上我自己想要的功能。在它中是一个自定义Panel
来显示TabControl的标题。它的功能是压缩TabItems
的大小,直到它们达到最小值,然后激活滚动功能(再次在Panel中)。还有另一个自定义面板可以容纳一个按钮,该按钮呈现在TabItems
的右侧(这是一个“新标签”按钮)。
这一切都很有效,直到我尝试为滚动设置动画。
以下是一些相关摘要:
在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 :(得分:0)
好。通常情况下,我一直在努力,并且......自己回答。
仍然可以对其他人有用,所以这里是抓住了。在该行:
var aScrollAnimation = new DoubleAnimation(_translateTransform.X, -offset, new Duration(this.AnimationTimeSpan), FillBehavior.HoldEnd)
{ AccelerationRatio = 0.5, DecelerationRatio = 0.5 };
FillBehavior
应该是FillBehavior.Stop
。
就这么简单!