Пример #1
0
        private void ToggleEvent(int persianYear, int persianMonth, int persianDay,
                                 DayOfWeekConverter.PersianDayOfWeek thisDayOfWeek, DayModel @event)
        {
            if (@event?.Events?.Count >= 1)
            {
                _panelWrapper.Show <Event>(eventPage =>
                {
                    eventPage.EventDay.Text =
                        $"{thisDayOfWeek.GetDisplayName()} {persianDay} {MonthsName.Persian(persianMonth)} {persianYear}";
                    eventPage.EventText.Text = string.Join(Environment.NewLine, @event.Events.ToArray());

                    var eventsApproxHeight =
                        (eventPage.EventText.Text.Split(new[] { Environment.NewLine }, StringSplitOptions.None).Length *
                         22)
                        + eventPage.EventText.Margin.Top;
                    var topMargin = eventsApproxHeight + 50;

                    eventPage.MouseDown += (sender, args) =>
                    {
                        _panelWrapper.Show <Event>(eventPage2 =>
                        {
                            eventPage2.MouseDown += (sender2, args2) =>
                            {
                                _panelWrapper.Show <Event>(_ => topMargin);
                            };
                            return(topMargin);
                        });
                    };
                    return(topMargin);
                }, TimeSpan.FromSeconds(2));
            }
            else
            {
                _panelWrapper.CloseLastPanel();
            }
        }
Пример #2
0
        private void DesignDayButton(Panel parentGrid, int persianYear, int persianMonth, int persianDay, DayOfWeekConverter.PersianDayOfWeek dayOfWeek, DayModel dayModel)
        {
            var gregorianOfThisDay = new PersianDateTime(persianYear, persianMonth, persianDay).ToDateTime();

            // Condition check
            var hasEvent  = dayModel.Events?.Count > 0;
            var isToday   = gregorianOfThisDay.Date == DateTime.Now.Date;
            var isHoliday = (hasEvent && dayModel.IsHoliday) || ((int)dayOfWeek + 1 == 7);

            var persianDayForecolor   = CurrentThemePersianDayForecolor;
            var gregorianDayForecolor = CurrentThemeGregHijrForecolor;
            var hijriDayForecolor     = CurrentThemeGregHijrForecolor;

            var dayBackground = hasEvent ? CurrentThemeHasEventDayBackColor : Brushes.Transparent;

            var dayBorderThick = hasEvent && isToday ? new Thickness(3, 3, 3, 3) : new Thickness(0, 0, 0, 0);
            var dayBorderColor = hasEvent && isToday ? Brushes.DimGray : Brushes.Transparent;

            if (isToday)
            {
                dayBackground = new SolidColorBrush(new Color
                {
                    A = 75,
                    R = 0,
                    G = 0,
                    B = 0
                });
                persianDayForecolor   = Brushes.White;
                gregorianDayForecolor = Brushes.White;
                hijriDayForecolor     = Brushes.White;
            }

            if (isHoliday)
            {
                persianDayForecolor   = Brushes.Red;
                gregorianDayForecolor = Brushes.Red;
                hijriDayForecolor     = Brushes.Red;
            }

            if (isToday && isHoliday)
            {
                dayBackground         = Brushes.Red;
                persianDayForecolor   = Brushes.White;
                gregorianDayForecolor = Brushes.White;
                hijriDayForecolor     = Brushes.White;
            }

            // Stylize day box
            var persianDayNumber = new DayTextBlock
            {
                Text       = persianDay.ToString(),
                Foreground = persianDayForecolor,
                FontSize   = 14,
                FontFamily = new FontFamily("IRANSansWeb(FaNum)")
            };

            var gregorianDayNumber = new DayTextBlock
            {
                Margin     = new Thickness(4, 0, 0, 0),
                Text       = gregorianOfThisDay.Day.ToString(),
                FontSize   = 10,
                Foreground = gregorianDayForecolor,
                FontFamily = new FontFamily("IRANSansWeb"),
            };
            var hijriDayNumber = new DayTextBlock
            {
                Margin     = new Thickness(0, 0, 4, 0),
                Text       = new HijriCalendar().GetDayOfMonth(gregorianOfThisDay).ToString(),
                FontFamily = new FontFamily("IRANSansWeb"),
                Foreground = hijriDayForecolor,
                FontSize   = 10,
            };

            var subBlock = new Grid
            {
                ColumnDefinitions =
                {
                    new ColumnDefinition {
                        Width = new GridLength(1, GridUnitType.Star)
                    },
                    new ColumnDefinition {
                        Width = new GridLength(1, GridUnitType.Star)
                    }
                },
                Children =
                {
                    gregorianDayNumber,
                    hijriDayNumber
                },
                HorizontalAlignment = HorizontalAlignment.Stretch,
                VerticalAlignment   = VerticalAlignment.Stretch,
            };

            Grid.SetColumn(gregorianDayNumber, 0);
            Grid.SetColumn(hijriDayNumber, 1);

            var dayGrid = new Grid
            {
                RowDefinitions =
                {
                    new RowDefinition {
                        Height = new GridLength(1, GridUnitType.Star)
                    },
                    new RowDefinition {
                        Height = new GridLength(1, GridUnitType.Star)
                    },
                },
                Children =
                {
                    persianDayNumber,
                    subBlock
                },
                VerticalAlignment   = VerticalAlignment.Stretch,
                HorizontalAlignment = HorizontalAlignment.Stretch,
                Width = 40,
            };

            Grid.SetRow(persianDayNumber, 0);
            Grid.SetRow(subBlock, 1);

            var block = new Button
            {
                HorizontalContentAlignment = HorizontalAlignment.Stretch,
                Style           = (Style)Application.Current.Resources["DayItemTheme"],
                ClipToBounds    = true,
                Content         = dayGrid,
                Background      = dayBackground,
                BorderThickness = dayBorderThick,
                BorderBrush     = dayBorderColor,
            };

            block.Click += delegate { ToggleEvent(persianYear, persianMonth, persianDay, dayOfWeek, dayModel); };
            parentGrid.Children.Add(block);

            var dayOfWeekIndex = (int)dayOfWeek;
            var weekIndex      = ((persianDay - 1) + (6 - dayOfWeekIndex)) / 7;

            Grid.SetRow(block, weekIndex);
            Grid.SetColumn(block, dayOfWeekIndex);
        }