Exemple #1
0
 private void InitializeColumns()
 {
     if (this.Orientation == Orientation.Horizontal)
     {
         AppointmentSlotCollection source = this.AppointmentItemsControl != null ? this.AppointmentItemsControl.ItemsSource as AppointmentSlotCollection : null;
         if (source != null)
         {
             var sortedAppointmentInfo = InitizlieAppointmentSlotInformation(source);
             var groups = InitizlieAppointmentSlotGroup(sortedAppointmentInfo);
             for (int i = 0; i < groups.Count; i++)
             {
                 var groupInfo = groups[i];
                 this.columns.Add(VirtualizedAppointmentPanel.SplitToColumns(groupInfo));
             }
         }
     }
 }
Exemple #2
0
        private void GenerateContainers(TimeSlotItemAppointments timeSlotAppointment, AppointmentSlotCollection source)
        {
            var    timeSlotItem      = timeSlotAppointment.TimeSlotItem;
            var    timeSlot          = timeSlotItem.TimeSlot;
            var    contentHost       = timeSlotItem.ContentHost ?? timeSlotItem;
            double contentHostHeight = contentHost.RenderSize.Height;

            int    childIndex                 = 0;
            double stackDesiredSizeHeight     = 0;
            IItemContainerGenerator generator = this.ItemContainerGenerator;
            bool generate = true;

            for (int i = 0; i < timeSlotAppointment.Appointments.Count; i++)
            {
                if (!timeSlotAppointment.Appointments.ContainsKey(i))
                {
                    continue;
                }

                var appSlot = timeSlotAppointment.Appointments[i];
                if (appSlot.TimeSlot.Start != timeSlot.Start)
                {
                    continue;
                }

                int itemIndex = source.IndexOf(appSlot);

                UIElement child = ((System.Windows.Controls.ItemContainerGenerator)generator).ContainerFromIndex(itemIndex) as UIElement;

                if (!generate)
                {
                    if (child != null)
                    {
                        this.RecycleAppointmentItem(child, itemIndex);
                    }
                    continue;
                }

                if (child == null)
                {
                    GeneratorPosition position = generator.GeneratorPositionFromIndex(itemIndex);
                    child = this.GenerateContainerAtPosition(position, ref childIndex);
                }

                Rect arrangeRect = this.GetLayoutSlot(appSlot);

                if (child != null)
                {
                    child.Measure(arrangeRect.Size);


                    Size desiredSize  = child.DesiredSize;
                    int  currentIndex = i + 1;
                    stackDesiredSizeHeight = desiredSize.Height * currentIndex;

                    if (this.IsVirtualizing && stackDesiredSizeHeight >= contentHostHeight)
                    {
                        var button = timeSlotItem.ShowMoreButton;
                        if (button != null)
                        {
                            button.Opacity   = 1;
                            button.IsEnabled = true;
                        }

                        this.RecycleAppointmentItem(child, itemIndex);
                        generate = false;
                    }
                }
            }
        }
Exemple #3
0
        internal static List <AppointmentSlotInformation> InitizlieAppointmentSlotInformation(AppointmentSlotCollection source)
        {
            List <AppointmentSlotInformation> slotsInfo = new List <AppointmentSlotInformation>();

            int count = source.Count;

            for (int i = 0; i < count; i++)
            {
                var appSlot = source[i];

                slotsInfo.Add(new AppointmentSlotInformation()
                {
                    Index = i, AppointmentSlot = appSlot, IsFirst = true
                });
                slotsInfo.Add(new AppointmentSlotInformation()
                {
                    Index = i, AppointmentSlot = appSlot, IsFirst = false
                });
            }

            slotsInfo.Sort((si1, si2) =>
            {
                int r = si1.Time.CompareTo(si2.Time);
                if (r == 0)
                {
                    r = si1.IsFirst == si2.IsFirst ? 0 : si1.IsFirst ? 1 : -1;
                }
                if (r == 0)
                {
                    var duration1 = si1.AppointmentSlot.TimeSlot.Duration();
                    var duration2 = si2.AppointmentSlot.TimeSlot.Duration();
                    r             = duration1.CompareTo(duration2) * (si1.IsFirst ? -1 : 1);
                }
                if (r == 0)
                {
                    r = si1.Index.CompareTo(si2.Index);
                }
                return(r);
            });

            return(slotsInfo);
        }