/// <summary>
        /// Ivoked when trying change angle of the knob.
        /// Sets the valid angle to knob by the event args.
        /// </summary>
        /// <param name="sender">The sender.</param>
        /// <param name="e">
        /// The <see cref="Tech4WPF.Common.TryAngleChangeEventArgs"/> instance
        /// containing the event data.
        /// </param>
        private void onTryAngleChange(UserControl sender, TryAngleChangeEventArgs e)
        {
            double newAngle = TechUtils.AngleToPositive360(e.NewAngle);

            if (this.Snap)
            {
                newAngle = snapAngle(newAngle, e.OldAngle, e.IsWheelScrolling);
            }

            if (newAngle <= this.scale.AngleRange)
            {
                this.knob.Angle = newAngle;
            }
            else
            {
                double halfForbiddenAngleBehindRange = this.scale.AngleRange + ((360 - this.scale.AngleRange) / 2);
                if (newAngle <= halfForbiddenAngleBehindRange)
                {
                    this.knob.Angle = this.scale.AngleRange;
                }
                else
                {
                    this.knob.Angle = 0;
                }
            }
        }
        /// <summary>
        /// Fires the try angle change event.
        /// </summary>
        /// <param name="newAngle">The new angle.</param>
        /// <param name="isWheelScrolling"><c>true</c> when is wheel scrolling.</param>
        private void fireTryAngleChange(double newAngle, bool isWheelScrolling)
        {
            //Maintaining the temporary copy of event to avoid race condition
            TryAngleChangeHandler tryAngleChange = TryAngleChange;

            if (tryAngleChange != null)
            {
                TryAngleChangeEventArgs angleChangedEventArgs =
                    new TryAngleChangeEventArgs(newAngle, this.Angle, isWheelScrolling);
                tryAngleChange(this, angleChangedEventArgs);
            }
        }