public CalendarXDayPresenter(CalendarX calendarX) { _calendar = calendarX; //Init items source _dayItems = CreateDayItems(); _weekNames = CreateWeekNames(); var weeksDisplayItemsControl = new ItemsControl() { ItemTemplate = new DataTemplate() { VisualTree = CreateWeekNameFactory(calendarX), }, ItemsPanel = new ItemsPanelTemplate() { VisualTree = CreateUniformGridFactory(1, ItemsColumns), }, ItemsSource = _weekNames, }; //Init items control var itemsControl = new ItemsControl() { ItemTemplate = new DataTemplate() { VisualTree = CreateCalendarXItemFactory(calendarX), }, ItemsPanel = new ItemsPanelTemplate() { VisualTree = CreateUniformGridFactory(ItemsRows, ItemsColumns), }, ItemsSource = _dayItems, }; Grid.SetRow(itemsControl, 1); _grid = new Grid(); _grid.RowDefinitions.Add(new RowDefinition() { Height = new GridLength(1, GridUnitType.Star) }); _grid.RowDefinitions.Add(new RowDefinition() { Height = new GridLength(ItemsRows, GridUnitType.Star) }); _grid.Children.Add(weeksDisplayItemsControl); _grid.Children.Add(itemsControl); //add to view AddVisualChild(_grid); AddLogicalChild(_grid); AddHandler(CalendarXItem.SelectedEvent, new RoutedEventHandler(OnCalendarXItemClicked)); }
private static FrameworkElementFactory CreateCalendarXItemFactory(CalendarX calendarX) { var itemFactory = new FrameworkElementFactory(typeof(CalendarXItem)); itemFactory.SetValue(CalendarXItem.ModeProperty, CalendarXItemMode.Day); itemFactory.SetBinding(CalendarXItem.StyleProperty, new Binding() { Path = new PropertyPath(CalendarX.CalendarXItemStyleProperty), Source = calendarX }); itemFactory.SetBinding(CalendarXItem.ContentProperty, new Binding() { Path = new PropertyPath(nameof(CalendarXDayItem.DisplayName)), }); itemFactory.SetBinding(CalendarXItem.VerticalContentAlignmentProperty, new Binding() { Path = new PropertyPath(CalendarX.VerticalContentAlignmentProperty), Source = calendarX }); itemFactory.SetBinding(CalendarXItem.HorizontalContentAlignmentProperty, new Binding() { Path = new PropertyPath(CalendarX.HorizontalContentAlignmentProperty), Source = calendarX }); itemFactory.SetBinding(CalendarXItem.IsSelectedProperty, new Binding() { Path = new PropertyPath(nameof(CalendarXDayItem.IsSelected)), }); itemFactory.SetBinding(CalendarXItem.IsInSelectionRangeProperty, new Binding() { Path = new PropertyPath(nameof(CalendarXDayItem.IsInSelectionRange)), }); itemFactory.SetBinding(CalendarXItem.IsSpecialDayProperty, new Binding() { Path = new PropertyPath(nameof(CalendarXDayItem.IsSpecialDay)), }); itemFactory.SetBinding(CalendarXItem.IsWeakenDisplayProperty, new Binding() { Path = new PropertyPath(nameof(CalendarXDayItem.IsWeakenDisplay)), }); itemFactory.SetBinding(CalendarXItem.IsTodayProperty, new Binding() { Path = new PropertyPath(nameof(CalendarXDayItem.IsToday)), }); return(itemFactory); }
private static FrameworkElementFactory CreateWeekNameFactory(CalendarX calendarX) { var textFactory = new FrameworkElementFactory(typeof(TextBlock)); textFactory.SetBinding(TextBlock.TextProperty, new Binding() { Path = new PropertyPath(nameof(CalendarXDayItem.DisplayName)), }); textFactory.SetBinding(TextBlock.VerticalAlignmentProperty, new Binding() { Path = new PropertyPath(CalendarX.VerticalContentAlignmentProperty), Source = calendarX }); textFactory.SetBinding(TextBlock.HorizontalAlignmentProperty, new Binding() { Path = new PropertyPath(CalendarX.HorizontalContentAlignmentProperty), Source = calendarX }); return(textFactory); }