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)); } } } }
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; } } } }
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); }