To reproduce:
public Form1()
{
InitializeComponent();
this.radScheduler1.Appointments.Add(new Appointment(DateTime.Today.AddHours(1),TimeSpan.FromHours(3),"Meeting"));
this.radScheduler1.ActiveViewType = SchedulerViewType.Week;
this.radScheduler1.GetWeekView().RangeFactor = ScaleRange.HalfHour;
this.radScheduler1.SchedulerElement.DragDropBehavior.AutoScrollDayViewOnDrag = true;
this.Size = new Size(800, 350);
}
It's necessary to stretch down the application so that a few hours are shown (let's say 4 hours) and the appointment is a bit less, for example 3 hours. If you look at the gif, I am scrolling down around 14, then I'm stopping a bit, while always keeping the mouse button pressed, and then I start scrolling up: at that time the scroll results in going down until 19, instead of going up.
Workaround:
this.radScheduler1.SchedulerElement.DragDropBehavior = new CustomAppointmentDraggingBehavior(this.radScheduler1.SchedulerElement);
public class CustomAppointmentDraggingBehavior : AppointmentDraggingBehavior
{
public CustomAppointmentDraggingBehavior(SchedulerVisualElement activeOwner) : base(activeOwner)
{
}
protected override void HandleMouseMove(Point mousePos)
{
base.HandleMouseMove(mousePos);
DayViewAppointmentsTable table = this.ActiveOwner.Scheduler.DragDropBehavior.ActiveOwner as DayViewAppointmentsTable;
if (table != null && this.ActiveOwner.Scheduler.DragDropBehavior.AutoScrollDayViewOnDrag)
{
Point pt = table.PointFromScreen(Control.MousePosition);
FieldInfo fi = typeof(DayViewAppointmentsTable).GetField("lastMovingPoint", System.Reflection.BindingFlags.NonPublic
| System.Reflection.BindingFlags.Instance);
fi.SetValue(table, pt);
}
}
}