/// <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;
        }
示例#4
0
        /// <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;
        }