Создание календаря

Основной код

XAML

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="auto"></RowDefinition>
        <RowDefinition></RowDefinition>
    </Grid.RowDefinitions>
    <Button x:Name="BtnBack" Content="<" Width="30" Height="30" HorizontalAlignment="Left" Margin="10" Click="BtnBack_Click">
        <Button.Resources>
            <Style TargetType="Border">
                <Setter Property="CornerRadius" Value="25"></Setter>
            </Style>
        </Button.Resources>
    </Button>
    <TextBlock x:Name="TextDate" VerticalAlignment="Center" HorizontalAlignment="Center"></TextBlock>
    <Button x:Name="BtnUp" Content=">" Width="30" Height="30" HorizontalAlignment="Right" Margin="10" Click="BtnUp_Click">
        <Button.Resources>
            <Style TargetType="Border">
                <Setter Property="CornerRadius" Value="25"></Setter>
            </Style>
        </Button.Resources>
    </Button>
    <Grid x:Name="GridPanel" Grid.Row="1">
        <Grid.ColumnDefinitions>
            <ColumnDefinition></ColumnDefinition>
            <ColumnDefinition></ColumnDefinition>
            <ColumnDefinition></ColumnDefinition>
            <ColumnDefinition></ColumnDefinition>
            <ColumnDefinition></ColumnDefinition>
            <ColumnDefinition></ColumnDefinition>
            <ColumnDefinition></ColumnDefinition>
            <ColumnDefinition></ColumnDefinition>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition></RowDefinition>
            <RowDefinition></RowDefinition>
            <RowDefinition></RowDefinition>
            <RowDefinition></RowDefinition>
            <RowDefinition></RowDefinition>
            <RowDefinition></RowDefinition>
            <RowDefinition></RowDefinition>
            <RowDefinition></RowDefinition>
        </Grid.RowDefinitions>
    </Grid>
</Grid>
      

C#

DateTime DateNow;

public UserCalendar()
{
    InitializeComponent();
    DateNow = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1);
    Refresh();
}

private void Refresh()
{
    GridPanel.Children.Clear();
    TextDate.Text = DateNow.ToString("MMMM yyyy");

    var dateStart = DateNow;
    var dateEnd = dateStart.AddMonths(1);

    var date = new DateTime();

    for (int index_date = 0; index_date < 7; index_date++)
    {
        var textDate = new TextBlock()
        {
            Text = date.AddDays(index_date).DayOfWeek.ToString().Substring(0, 3),
            FontSize = 17,
            VerticalAlignment = VerticalAlignment.Center,
            HorizontalAlignment = HorizontalAlignment.Center,
        };

        GridPanel.Children.Add(textDate);
        Grid.SetColumn(textDate, index_date);
    }

    var dat = (int)(dateStart.DayOfWeek - 1);
    if (dat == -1)
        dat = 6;

    while (dateStart < dateEnd)
    {
        var textNow = new TextBlock()
        {
            Text = dateStart.Day.ToString(),
            FontSize = 17,
            VerticalAlignment = VerticalAlignment.Center,
            HorizontalAlignment = HorizontalAlignment.Center,
        };

        GridPanel.Children.Add(textNow);

        var dateN = dateStart.Day + dat - 1;
        Grid.SetColumn(textNow, dateN % 7);
        Grid.SetRow(textNow, dateN / 7 + 1);

        dateStart = dateStart.AddDays(1);
    }
}

private void BtnDown_Click(object sender, RoutedEventArgs e)
{
    DateNow = DateNow.AddMonths(-1);
    Refresh();
}

private void BtnUp_Click(object sender, RoutedEventArgs e)
{
    DateNow = DateNow.AddMonths(1);
    Refresh();
}