/// <summary> /// Initializes a new instance of the <see cref="Unizite.FormsApp.Controls.CalendarView"/> class. /// </summary> public CalendarView() { _currentMonth = GetFirstDayInMonth(DateTime.Now); // Layout var layout = new StackLayout { Spacing = 0 , VerticalOptions = LayoutOptions.FillAndExpand}; // Header _monthYearLabel = new Label { FontAttributes = FontAttributes.Bold, HorizontalOptions = LayoutOptions.CenterAndExpand, VerticalOptions = LayoutOptions.CenterAndExpand, XAlign = TextAlignment.Center, YAlign = TextAlignment.Center, HeightRequest = TopHeight, }; // Prev month var prevMonthBtn = new RippleButton { BackgroundColor = Color.Transparent, FontFamily = FontAwesomeLabel.FontAwesomeName, HorizontalOptions = LayoutOptions.Start, VerticalOptions = LayoutOptions.CenterAndExpand, HeightRequest = TopHeight, WidthRequest = 34, TextColor = Color.FromHex("#AAAAAA"), Text = FontAwesomeLabel.FAChevronLeft, }; prevMonthBtn.Command = new Command( (obj) => { _currentMonth = _currentMonth.AddMonths(-1); UpdateCalendar(); }, (obj) => _currentMonth > MinDate - MinDate.TimeOfDay); // Next month var nextMonthBtn = new RippleButton{ BackgroundColor = Color.Transparent, FontFamily = FontAwesomeLabel.FontAwesomeName, HorizontalOptions = LayoutOptions.End, VerticalOptions = LayoutOptions.CenterAndExpand, HeightRequest = TopHeight, WidthRequest = 34, TextColor = Color.FromHex("#AAAAAAA"), Text = FontAwesomeLabel.FAChevronRight, }; nextMonthBtn.Command = new Command( (obj) => { _currentMonth = _currentMonth.AddMonths(1); UpdateCalendar(); }, (obj) => _currentMonth.AddMonths(1) <= MaxDate); var headerLayout = new StackLayout { Orientation = StackOrientation.Horizontal, HorizontalOptions = LayoutOptions.FillAndExpand, Children = { prevMonthBtn, _monthYearLabel, nextMonthBtn } }; layout.Children.Add(headerLayout); // Day names var dayNames = CultureInfo.CurrentCulture.DateTimeFormat.AbbreviatedDayNames; var firstDayOfWeek = CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek; var dayGrid = new Grid { HeightRequest = DayNamesHeight, }; var currentWeekDay = firstDayOfWeek; for (var d = 0; d < 7; d++) { var label = new Label{ BackgroundColor= Color.Transparent, XAlign = TextAlignment.Center, YAlign = TextAlignment.Center, Text = dayNames[(int)currentWeekDay] }; _dayNameLabels [d] = label; currentWeekDay++; if((int)currentWeekDay == 7) currentWeekDay = 0; dayGrid.Children.Add (label, d, 0); } layout.Children.Add(dayGrid); // Calendar _calendar = new NControlView{ DrawingFunction = DrawCalendar }; var calendarLayout = new AbsoluteLayout { VerticalOptions = LayoutOptions.FillAndExpand, HorizontalOptions = LayoutOptions.FillAndExpand}; calendarLayout.Children.Add(_calendar); AbsoluteLayout.SetLayoutBounds(_calendar, new Rectangle(0f, 0f, 1f, 1f)); AbsoluteLayout.SetLayoutFlags(_calendar, AbsoluteLayoutFlags.All); var dayNumberGrid = CreateDayNumberGrid(); calendarLayout.Children.Add(dayNumberGrid); AbsoluteLayout.SetLayoutBounds(dayNumberGrid, new Rectangle(0f, 0f, 1f, 1f)); AbsoluteLayout.SetLayoutFlags(dayNumberGrid, AbsoluteLayoutFlags.All); // Ellipse _ellipse = new NControlView { BackgroundColor = Color.Transparent, DrawingFunction = (canvas, rect) =>{ var h = Math.Min(rect.Width, rect.Height); var dx = (rect.Width - h)/2; var dy = (rect.Height - h)/2; var r = new NGraphics.Rect(dx, dy, h, h); canvas.DrawEllipse(r, null, new NGraphics.SolidBrush(Color.FromHex("#DDDDDD").ToNColor())); }, Scale = 0.0, }; calendarLayout.Children.Add(_ellipse); AbsoluteLayout.SetLayoutBounds(_ellipse, new Rectangle(0f, 0f, 1/7f, 1/6f)); AbsoluteLayout.SetLayoutFlags(_ellipse, AbsoluteLayoutFlags.All); layout.Children.Add(calendarLayout); Content = layout; }
/// <summary> /// Initializes a new instance of the <see cref="Unizite.FormsApp.Controls.CalendarView"/> class. /// </summary> public CalendarView() { // Layout var layout = new RelativeLayout (); // Header _monthYearLabel = new Label { FontAttributes = FontAttributes.Bold, HorizontalOptions = LayoutOptions.CenterAndExpand, VerticalOptions = LayoutOptions.CenterAndExpand, XAlign = TextAlignment.Center, YAlign = TextAlignment.Center, HeightRequest = TopHeight, }; _monthYearLabel.SetBinding (Label.TextProperty, MonthYearStringProperty.PropertyName); // Prev month var prevMonthBtn = new RippleButton { BackgroundColor = Color.Transparent, FontFamily = FontAwesomeLabel.FontAwesomeName, HorizontalOptions = LayoutOptions.Start, VerticalOptions = LayoutOptions.CenterAndExpand, HeightRequest = TopHeight, WidthRequest = 34, TextColor = Color.FromHex("#AAAAAA"), Text = FontAwesomeLabel.FAChevronLeft, }; prevMonthBtn.Command = new Command((obj) => this.SelectedDate = this.SelectedDate.AddMonths (-1)); // Next month var nextMonthBtn = new RippleButton{ BackgroundColor = Color.Transparent, FontFamily = FontAwesomeLabel.FontAwesomeName, HorizontalOptions = LayoutOptions.End, VerticalOptions = LayoutOptions.CenterAndExpand, HeightRequest = TopHeight, WidthRequest = 34, TextColor = Color.FromHex("#AAAAAAA"), Text = FontAwesomeLabel.FAChevronRight, }; nextMonthBtn.Command = new Command((obj) => this.SelectedDate = this.SelectedDate.AddMonths (1)); var headerLayout = new StackLayout { Orientation = StackOrientation.Horizontal, HorizontalOptions = LayoutOptions.FillAndExpand, Children = { prevMonthBtn, _monthYearLabel, nextMonthBtn } }; layout.Children.Add (headerLayout, ()=> new Rectangle(0, 0, layout.Width, TopHeight)); // Day names var dayNames = CultureInfo.CurrentCulture.DateTimeFormat.AbbreviatedDayNames; var firstDayOfWeek = CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek; var dayGrid = new Grid { HeightRequest = DayNamesHeight, }; var currentWeekDay = firstDayOfWeek; for (var d = 0; d < 7; d++) { var label = new Label{ BackgroundColor= Color.Transparent, XAlign = TextAlignment.Center, YAlign = TextAlignment.Center, Text = dayNames[(int)currentWeekDay] }; _dayNameLabels [d] = label; currentWeekDay++; if((int)currentWeekDay == 7) currentWeekDay = 0; dayGrid.Children.Add (label, d, 0); } layout.Children.Add(dayGrid, ()=> new Rectangle (0, TopHeight, layout.Width, DayNamesHeight)); // Calendar _calendar = new NControlView{ DrawingFunction = DrawCalendar, }; layout.Children.Add (_calendar, ()=> new Rectangle ( 0, TopHeight+DayNamesHeight, layout.Width, layout.Height - (TopHeight + DayNamesHeight))); // Day Number Labels var lc = 0; var dayNumberGrid = new Grid { ColumnSpacing = 0, RowSpacing = 0, Padding = 0, ColumnDefinitions = { new ColumnDefinition{Width = new GridLength(100.0/7.0, GridUnitType.Star) }, new ColumnDefinition{Width = new GridLength(100.0/7.0, GridUnitType.Star) }, new ColumnDefinition{Width = new GridLength(100.0/7.0, GridUnitType.Star) }, new ColumnDefinition{Width = new GridLength(100.0/7.0, GridUnitType.Star) }, new ColumnDefinition{Width = new GridLength(100.0/7.0, GridUnitType.Star) }, new ColumnDefinition{Width = new GridLength(100.0/7.0, GridUnitType.Star) }, new ColumnDefinition{Width = new GridLength(100.0/7.0, GridUnitType.Star) }, }, RowDefinitions = { new RowDefinition{ Height = new GridLength(100.0/5.0, GridUnitType.Star) }, new RowDefinition{ Height = new GridLength(100.0/5.0, GridUnitType.Star) }, new RowDefinition{ Height = new GridLength(100.0/5.0, GridUnitType.Star) }, new RowDefinition{ Height = new GridLength(100.0/5.0, GridUnitType.Star) }, new RowDefinition{ Height = new GridLength(100.0/5.0, GridUnitType.Star) }, new RowDefinition{ Height = new GridLength(100.0/5.0, GridUnitType.Star) }, } }; layout.Children.Add (dayNumberGrid, ()=> new Rectangle ( 0, TopHeight+DayNamesHeight, layout.Width, layout.Height - (TopHeight + DayNamesHeight))); for (var r = 0; r < 6; r++) { for (var c = 0; c < 7; c++) { var dayLabel = new Label{ XAlign = TextAlignment.Center, YAlign = TextAlignment.Center, TextColor = Color.Black, BackgroundColor = Color.Transparent, Text = "A" + lc.ToString(), }; dayNumberGrid.Children.Add (dayLabel, c, r); _dayNumberLabels [lc++] = dayLabel; } } // Ellipse _ellipse = new NControlView { BackgroundColor = Color.Transparent, DrawingFunction = (canvas, rect) =>{ canvas.DrawEllipse(rect, null, new NGraphics.SolidBrush(Color.FromHex("#DDDDDD").ToNColor())); }, Scale = 0.0, }; layout.Children.Add (_ellipse, () => new Rectangle ( 0, TopHeight + DayNamesHeight, Math.Min(_calendar.Width / 7, _calendar.Height/7), Math.Min(_calendar.Width / 7, _calendar.Height/7) ) ); Content = layout; }
/// <summary> /// Initializes a new instance of the <see cref="Unizite.FormsApp.Controls.CalendarView"/> class. /// </summary> public CalendarView() { _currentMonth = GetFirstDayInMonth(DateTime.Now); // Layout var layout = new StackLayout { Spacing = 0, VerticalOptions = LayoutOptions.FillAndExpand }; // Header _monthYearLabel = new Label { FontAttributes = FontAttributes.Bold, HorizontalOptions = LayoutOptions.CenterAndExpand, VerticalOptions = LayoutOptions.CenterAndExpand, XAlign = TextAlignment.Center, YAlign = TextAlignment.Center, HeightRequest = TopHeight, }; // Prev month var prevMonthBtn = new RippleButton { BackgroundColor = Color.Transparent, FontFamily = FontAwesomeLabel.FontAwesomeName, HorizontalOptions = LayoutOptions.Start, VerticalOptions = LayoutOptions.CenterAndExpand, HeightRequest = TopHeight, WidthRequest = 34, TextColor = Color.FromHex("#AAAAAA"), Text = FontAwesomeLabel.FAChevronLeft, }; prevMonthBtn.Command = new Command( (obj) => { _currentMonth = _currentMonth.AddMonths(-1); UpdateCalendar(); }, (obj) => _currentMonth > MinDate - MinDate.TimeOfDay); // Next month var nextMonthBtn = new RippleButton { BackgroundColor = Color.Transparent, FontFamily = FontAwesomeLabel.FontAwesomeName, HorizontalOptions = LayoutOptions.Start, VerticalOptions = LayoutOptions.CenterAndExpand, HeightRequest = TopHeight, WidthRequest = 34, TextColor = Color.FromHex("#AAAAAA"), Text = FontAwesomeLabel.FAChevronRight, }; nextMonthBtn.Command = new Command( (obj) => { _currentMonth = _currentMonth.AddMonths(1); UpdateCalendar(); }, (obj) => _currentMonth.AddMonths(1) <= MaxDate); var headerLayout = new StackLayout { Orientation = StackOrientation.Horizontal, HorizontalOptions = LayoutOptions.FillAndExpand, Children = { prevMonthBtn, _monthYearLabel, nextMonthBtn } }; layout.Children.Add(headerLayout); // Day names var dayNames = CultureInfo.CurrentCulture.DateTimeFormat.AbbreviatedDayNames; var firstDayOfWeek = CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek; var dayGrid = new Grid { HeightRequest = DayNamesHeight, }; var currentWeekDay = firstDayOfWeek; for (var d = 0; d < 7; d++) { var label = new Label { BackgroundColor = Color.Transparent, XAlign = TextAlignment.Center, YAlign = TextAlignment.Center, Text = dayNames[(int)currentWeekDay] }; _dayNameLabels[d] = label; currentWeekDay++; if ((int)currentWeekDay == 7) { currentWeekDay = 0; } dayGrid.Children.Add(label, d, 0); } layout.Children.Add(dayGrid); layout.Children.Add(new BoxView { HeightRequest = 8 }); // Calendar _calendar = new NControlView { DrawingFunction = DrawCalendar }; var calendarLayout = new AbsoluteLayout { VerticalOptions = LayoutOptions.FillAndExpand, HorizontalOptions = LayoutOptions.FillAndExpand }; calendarLayout.Children.Add(_calendar); AbsoluteLayout.SetLayoutBounds(_calendar, new Rectangle(0f, 0f, 1f, 1f)); AbsoluteLayout.SetLayoutFlags(_calendar, AbsoluteLayoutFlags.All); var dayNumberGrid = CreateDayNumberGrid(); calendarLayout.Children.Add(dayNumberGrid); AbsoluteLayout.SetLayoutBounds(dayNumberGrid, new Rectangle(0f, 0f, 1f, 1f)); AbsoluteLayout.SetLayoutFlags(dayNumberGrid, AbsoluteLayoutFlags.All); // Ellipse _ellipse = new NControlView { BackgroundColor = Color.Transparent, DrawingFunction = (canvas, rect) => { var h = Math.Min(rect.Width, rect.Height); var dx = (rect.Width - h) / 2; var dy = (rect.Height - h) / 2; var r = new NGraphics.Rect(dx, dy, h, h); canvas.DrawEllipse(r, null, new NGraphics.SolidBrush(Color.FromHex("#DDDDDD").ToNColor())); }, Scale = 0.0, }; calendarLayout.Children.Add(_ellipse); AbsoluteLayout.SetLayoutBounds(_ellipse, new Rectangle(0f, 0f, 1 / 7f, 1 / 6f)); AbsoluteLayout.SetLayoutFlags(_ellipse, AbsoluteLayoutFlags.All); layout.Children.Add(calendarLayout); Content = layout; }
/// <summary> /// Initializes a new instance of the <see cref="Unizite.FormsApp.Controls.CalendarView"/> class. /// </summary> public CalendarView() { // Layout var layout = new RelativeLayout(); // Header _monthYearLabel = new Label { FontAttributes = FontAttributes.Bold, HorizontalOptions = LayoutOptions.CenterAndExpand, VerticalOptions = LayoutOptions.CenterAndExpand, XAlign = TextAlignment.Center, YAlign = TextAlignment.Center, HeightRequest = TopHeight, }; _monthYearLabel.SetBinding(Label.TextProperty, MonthYearStringProperty.PropertyName); // Prev month var prevMonthBtn = new RippleButton { BackgroundColor = Color.Transparent, FontFamily = FontAwesomeLabel.FontAwesomeName, HorizontalOptions = LayoutOptions.Start, VerticalOptions = LayoutOptions.CenterAndExpand, HeightRequest = TopHeight, WidthRequest = 34, TextColor = Color.FromHex("#AAAAAA"), Text = FontAwesomeLabel.FAChevronLeft, }; prevMonthBtn.Command = new Command((obj) => this.SelectedDate = this.SelectedDate.AddMonths(-1)); // Next month var nextMonthBtn = new RippleButton { BackgroundColor = Color.Transparent, FontFamily = FontAwesomeLabel.FontAwesomeName, HorizontalOptions = LayoutOptions.End, VerticalOptions = LayoutOptions.CenterAndExpand, HeightRequest = TopHeight, WidthRequest = 34, TextColor = Color.FromHex("#AAAAAAA"), Text = FontAwesomeLabel.FAChevronRight, }; nextMonthBtn.Command = new Command((obj) => this.SelectedDate = this.SelectedDate.AddMonths(1)); var headerLayout = new StackLayout { Orientation = StackOrientation.Horizontal, HorizontalOptions = LayoutOptions.FillAndExpand, Children = { prevMonthBtn, _monthYearLabel, nextMonthBtn } }; layout.Children.Add(headerLayout, () => new Rectangle(0, 0, layout.Width, TopHeight)); // Day names var dayNames = CultureInfo.CurrentCulture.DateTimeFormat.AbbreviatedDayNames; var firstDayOfWeek = CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek; var dayGrid = new Grid { HeightRequest = DayNamesHeight, }; var currentWeekDay = firstDayOfWeek; for (var d = 0; d < 7; d++) { var label = new Label { BackgroundColor = Color.Transparent, XAlign = TextAlignment.Center, YAlign = TextAlignment.Center, Text = dayNames[(int)currentWeekDay] }; _dayNameLabels [d] = label; currentWeekDay++; if ((int)currentWeekDay == 7) { currentWeekDay = 0; } dayGrid.Children.Add(label, d, 0); } layout.Children.Add(dayGrid, () => new Rectangle(0, TopHeight, layout.Width, DayNamesHeight)); // Calendar _calendar = new NControlView { DrawingFunction = DrawCalendar, }; layout.Children.Add(_calendar, () => new Rectangle( 0, TopHeight + DayNamesHeight, layout.Width, layout.Height - (TopHeight + DayNamesHeight))); // Day Number Labels var lc = 0; var dayNumberGrid = new Grid { ColumnSpacing = 0, RowSpacing = 0, Padding = 0, ColumnDefinitions = { new ColumnDefinition { Width = new GridLength(100.0 / 7.0, GridUnitType.Star) }, new ColumnDefinition { Width = new GridLength(100.0 / 7.0, GridUnitType.Star) }, new ColumnDefinition { Width = new GridLength(100.0 / 7.0, GridUnitType.Star) }, new ColumnDefinition { Width = new GridLength(100.0 / 7.0, GridUnitType.Star) }, new ColumnDefinition { Width = new GridLength(100.0 / 7.0, GridUnitType.Star) }, new ColumnDefinition { Width = new GridLength(100.0 / 7.0, GridUnitType.Star) }, new ColumnDefinition { Width = new GridLength(100.0 / 7.0, GridUnitType.Star) }, }, RowDefinitions = { new RowDefinition { Height = new GridLength(100.0 / 5.0, GridUnitType.Star) }, new RowDefinition { Height = new GridLength(100.0 / 5.0, GridUnitType.Star) }, new RowDefinition { Height = new GridLength(100.0 / 5.0, GridUnitType.Star) }, new RowDefinition { Height = new GridLength(100.0 / 5.0, GridUnitType.Star) }, new RowDefinition { Height = new GridLength(100.0 / 5.0, GridUnitType.Star) }, new RowDefinition { Height = new GridLength(100.0 / 5.0, GridUnitType.Star) }, } }; layout.Children.Add(dayNumberGrid, () => new Rectangle( 0, TopHeight + DayNamesHeight, layout.Width, layout.Height - (TopHeight + DayNamesHeight))); for (var r = 0; r < 6; r++) { for (var c = 0; c < 7; c++) { var dayLabel = new Label { XAlign = TextAlignment.Center, YAlign = TextAlignment.Center, TextColor = Color.Black, BackgroundColor = Color.Transparent, Text = "A" + lc.ToString(), }; dayNumberGrid.Children.Add(dayLabel, c, r); _dayNumberLabels [lc++] = dayLabel; } } // Ellipse _ellipse = new NControlView { BackgroundColor = Color.Transparent, DrawingFunction = (canvas, rect) => { canvas.DrawEllipse(rect, null, new NGraphics.SolidBrush(Color.FromHex("#DDDDDD").ToNColor())); }, Scale = 0.0, }; layout.Children.Add(_ellipse, () => new Rectangle( 0, TopHeight + DayNamesHeight, Math.Min(_calendar.Width / 7, _calendar.Height / 7), Math.Min(_calendar.Width / 7, _calendar.Height / 7) ) ); Content = layout; }