protected override void OnMouseMove(MouseEventArgs e) { base.OnMouseMove(e); ICalendarSelectableElement hitted = HitTest(e.GetPosition(this), State != CalendarState.Idle); CalendarItem hittedItem = hitted as CalendarItem; CalendarDayTop hittedTop = hitted as CalendarDayTop; bool shiftPressed = Keyboard.IsKeyDown(Key.LeftShift) || Keyboard.IsKeyDown(Key.RightShift); if (hitted != null) { switch (State) { case CalendarState.Idle: Cursor should = Cursors.Arrow; if (hittedItem != null) { if ((hittedItem.ResizeEndDateZone(e.GetPosition(this)) || hittedItem.ResizeStartDateZone(e.GetPosition(this))) && AllowItemResize) { should = hittedItem.IsOnDayTop || DaysMode == CalendarDaysMode.Short ? Cursors.SizeWE : Cursors.SizeNS; } OnItemMouseHover(new CalendarItemEventArgs(hittedItem)); } if (!Cursor.Equals(should)) { Cursor = should; } break; case CalendarState.DraggingTimeSelection: if (SelectedElementStart != null && !SelectedElementEnd.Equals(hitted)) { SelectedElementEnd = hitted; } break; case CalendarState.DraggingItem: TimeSpan duration = itemOnState.Duration; itemOnState.SetIsDragging(true); itemOnState.StartDate = hitted.Date; itemOnState.EndDate = itemOnState.StartDate.Add(duration); Renderer.PerformItemsLayout(); Invalidate(); itemOnStateChanged = true; break; case CalendarState.ResizingItem: if (itemOnState.IsResizingEndDate && hitted.Date.CompareTo(itemOnState.StartDate) >= 0) { itemOnState.EndDate = hitted.Date.Add(hittedTop != null || DaysMode == CalendarDaysMode.Short ? new TimeSpan(23, 59, 59) : Days[0].TimeUnits[0].Duration); } else if (itemOnState.IsResizingStartDate && hitted.Date.CompareTo(itemOnState.EndDate) <= 0) { itemOnState.StartDate = hitted.Date; } Renderer.PerformItemsLayout(); Invalidate(); itemOnStateChanged = true; break; case CalendarState.EditingItemText: break; } } }