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