位置转化
private void DrawScale()
{
double majorTickUnitValue = this.ScaleSweepLenth / this.MajorDivisionsCount;
double minorTickUnitValue = this.ScaleSweepLenth / this.MinorDivisionsCount;
double correctionOffset = this.rootGrid.Width / 2 ;
Double minvalue = MinValue; ;
//画主刻度
for (int i = 0; i < this.MajorDivisionsCount; i++)
{
Rectangle majorTickRect = new Rectangle();
majorTickRect.Height = this.MajorTickSize.Height;
majorTickRect.Width = this.MajorTickSize.Width;
majorTickRect.Fill = new SolidColorBrush(this.MajorTickColor);
TransformGroup majorTickTransformGroup = new TransformGroup();
TranslateTransform majorTickTranslateTransform = new TranslateTransform();
majorTickTranslateTransform.X = i * majorTickUnitValue - correctionOffset;
majorTickTranslateTransform.Y = this.MajorMinorDivisionOffset;
majorTickTransformGroup.Children.Add(majorTickTranslateTransform);
majorTickRect.RenderTransform = majorTickTransformGroup;
this.rootGrid.Children.Add(majorTickRect);
}
}
动画
private void MovePointerUsingAnimate(double oldValue, double newValue)
{
if (null != this.pointer)
{
double distanceOldAndNew = Math.Abs(newValue - oldValue);
DoubleAnimation doubleAnimation = new DoubleAnimation();
double animDuration = 0.0f;
Storyboard movingPointerStoryboard = new Storyboard();
TransformGroup transformGroup = new TransformGroup();
TranslateTransform transform = new TranslateTransform();
doubleAnimation.From = oldValue;
doubleAnimation.To = newValue;
animDuration = distanceOldAndNew * animatingSpeedFactor;
doubleAnimation.Duration = new Duration(TimeSpan.FromMilliseconds(animDuration));
movingPointerStoryboard.Completed +=new EventHandler(MovingPointerStoryboardStoryboard_Completed);
movingPointerStoryboard.Children.Add(doubleAnimation);
Storyboard.SetTarget(doubleAnimation, this.pointer);
transformGroup.Children.Add(transform);
this.pointer.RenderTransform = transformGroup;
Storyboard.SetTargetProperty(doubleAnimation,
new PropertyPath("(Path.RenderTransform).(TransformGroup.Children)[0].(TranslateTransform.X)"));
if (Math.Abs(oldValue - newValue) > 0)
{
movingPointerStoryboard.Begin();
}
}
}