- Displaying days on a custom calender wpf
- public SchedulePage(MainWindow parentForm)
- {
- InitializeComponent();
- _parentForm = parentForm;
- // DateTime date = new DateTime(year, month, day);
- _parentForm.bindings = new BindingCamper();
- int day = DateTime.DaysInMonth(2011, 10);
- for (int i = 0; i < 6; i++)
- for (int j = 0; j < 7; j++)
- {
- {
- _parentForm.bindings.schedule.Add(new Schedule { WeekNo = i, WeekDay = j });
- DataContext = _parentForm.bindings;
- }
- }
- public class Schedule //: INotifyPropertyChanged
- {
- public int WeekNo { get; set; }
- public int WeekDay { get; set; }
- public DateTime Date { get; set; }
- public int datenum
- {
- get { return (int)Date.DayOfWeek; }
- }
- <ItemsControl ItemsSource="{Binding schedule}" Name="Calender" Margin="0,34,0,0" VerticalAlignment="Stretch">
- <ItemsControl.Template>
- <ControlTemplate TargetType="ItemsControl" >
- <Border BorderBrush="Aqua" BorderThickness="1" CornerRadius="15">
- <ItemsPresenter/>
- </Border>
- </ControlTemplate>
- </ItemsControl.Template>
- <!-- ItemsPanelTemplate -->
- <ItemsControl.ItemsPanel>
- <ItemsPanelTemplate>
- <Grid ShowGridLines="True" Name="gridCalender">
- <Grid.RowDefinitions>
- <RowDefinition />
- <RowDefinition />
- <RowDefinition />
- <RowDefinition />
- <RowDefinition />
- <RowDefinition />
- </Grid.RowDefinitions>
- <Grid.ColumnDefinitions>
- <ColumnDefinition />
- <ColumnDefinition />
- <ColumnDefinition />
- <ColumnDefinition />
- <ColumnDefinition />
- <ColumnDefinition />
- <ColumnDefinition />
- </Grid.ColumnDefinitions>
- </Grid>
- </ItemsPanelTemplate>
- </ItemsControl.ItemsPanel>
- <ItemsControl.ItemTemplate>
- <DataTemplate>
- <TextBlock Text ="{Binding datenum}" Background="#FFBCF4E0" OpacityMask="Black" Grid.Column="{Binding datenum}" />
- </DataTemplate>
- </ItemsControl.ItemTemplate>
- <!-- ItemContainerStyle -->
- <ItemsControl.ItemContainerStyle>
- <Style >
- <Setter Property="Grid.Column" Value="{Binding WeekDay}" />
- <Setter Property="Grid.Row" Value="{Binding WeekNo}" />
- </Style>
- </ItemsControl.ItemContainerStyle>
- </ItemsControl>
- DateTime today = DateTime.Now;
- DateTime startDate = new DateTime(today.Year, today.Month, 1);
- DateTime endDate = startDate.AddMonths(1).AddDays(-1);
- while (startDate <= endDate)
- {
- DayCollection.Add(new Day
- {
- Date = startDate,
- WeekDay = (int)startDate.DayOfWeek,
- WeekNo = startDate.GetWeekOfMonth()
- });
- startDate = startDate.AddDays(1);
- }
- static class DateTimeExtensions
- {
- static GregorianCalendar _gc = new GregorianCalendar();
- public static int GetWeekOfMonth(this DateTime time)
- {
- DateTime first = new DateTime(time.Year, time.Month, 1);
- return time.GetWeekOfYear() - first.GetWeekOfYear() + 1;
- }
- static int GetWeekOfYear(this DateTime time)
- {
- return _gc.GetWeekOfYear(time, CalendarWeekRule.FirstDay, DayOfWeek.Sunday);
- }
- }