コード例 #1
0
        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;
                }
            }
        }