Few days ago I got a requirement to show calendar for ticket booking app in windows but there is no default control to show calendar in windows phone. So i need to create custom control to achieve this task and also love to share it with you. Let’s start your Visual Studio, create a new Windows Phone app and paste these code snippets in you Xaml page.
- <StackPanel x:Name="ContentPanel" Grid.Row="1" Margin="10,154,14,186">
- <StackPanel HorizontalAlignment="Center" Background="#FF575757">
- <StackPanel>
- <Grid>
- <Button Content="-" BorderBrush="{x:Null}" HorizontalAlignment="Left" Click="previousMonth" />
- <TextBlock Name="CalendarHeader" Text="October 2015" VerticalAlignment="Center" HorizontalAlignment="Center" FontWeight="ExtraLight" FontSize="26" />
- <Button Content="+" BorderBrush="{x:Null}" HorizontalAlignment="Right" Click="nextMonth" /> </Grid>
- </StackPanel>
- <StackPanel Orientation="Horizontal">
- <Grid Width="50" Height="50" Background="#FF363636">
- <TextBlock Text="S" VerticalAlignment="Center" HorizontalAlignment="Center" /> </Grid>
- <Grid Width="50" Height="50" Background="#FF363636">
- <TextBlock Text="M" VerticalAlignment="Center" HorizontalAlignment="Center" /> </Grid>
- <Grid Width="50" Height="50" Background="#FF363636">
- <TextBlock Text="T" VerticalAlignment="Center" HorizontalAlignment="Center" /> </Grid>
- <Grid Width="50" Height="50" Background="#FF363636">
- <TextBlock Text="W" VerticalAlignment="Center" HorizontalAlignment="Center" /> </Grid>
- <Grid Width="50" Height="50" Background="#FF363636">
- <TextBlock Text="T" VerticalAlignment="Center" HorizontalAlignment="Center" /> </Grid>
- <Grid Width="50" Height="50" Background="#FF363636">
- <TextBlock Text="F" VerticalAlignment="Center" HorizontalAlignment="Center" /> </Grid>
- <Grid Width="50" Height="50" Background="#FF363636">
- <TextBlock Text="S" VerticalAlignment="Center" HorizontalAlignment="Center" /> </Grid>
- </StackPanel>
- <StackPanel Name="Calendar" Margin="0, 0, 0, 5">
- <StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
- <Grid Width="50" Height="30">
- <TextBlock Text="" VerticalAlignment="Center" HorizontalAlignment="Center" /> </Grid>
- <Grid Width="50" Height="30">
- <TextBlock Text="" VerticalAlignment="Center" HorizontalAlignment="Center" /> </Grid>
- <Grid Width="50" Height="30">
- <TextBlock Text="" VerticalAlignment="Center" HorizontalAlignment="Center" /> </Grid>
- <Grid Width="50" Height="30">
- <TextBlock Text="" VerticalAlignment="Center" HorizontalAlignment="Center" /> </Grid>
- <Grid Width="50" Height="30">
- <TextBlock Text="" VerticalAlignment="Center" HorizontalAlignment="Center" /> </Grid>
- <Grid Width="50" Height="30">
- <TextBlock Text="" VerticalAlignment="Center" HorizontalAlignment="Center" /> </Grid>
- <Grid Width="50" Height="30">
- <TextBlock Text="" VerticalAlignment="Center" HorizontalAlignment="Center" /> </Grid>
- </StackPanel>
- <StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
- <Grid Width="50" Height="30">
- <TextBlock Text="" VerticalAlignment="Center" HorizontalAlignment="Center" /> </Grid>
- <Grid Width="50" Height="30">
- <TextBlock Text="" VerticalAlignment="Center" HorizontalAlignment="Center" /> </Grid>
- <Grid Width="50" Height="30">
- <TextBlock Text="" VerticalAlignment="Center" HorizontalAlignment="Center" /> </Grid>
- <Grid Width="50" Height="30">
- <TextBlock Text="" VerticalAlignment="Center" HorizontalAlignment="Center" /> </Grid>
- <Grid Width="50" Height="30">
- <TextBlock Text="" VerticalAlignment="Center" HorizontalAlignment="Center" /> </Grid>
- <Grid Width="50" Height="30">
- <TextBlock Text="" VerticalAlignment="Center" HorizontalAlignment="Center" /> </Grid>
- <Grid Width="50" Height="30">
- <TextBlock Text="" VerticalAlignment="Center" HorizontalAlignment="Center" /> </Grid>
- </StackPanel>
- <StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
- <Grid Width="50" Height="30">
- <TextBlock Text="" VerticalAlignment="Center" HorizontalAlignment="Center" /> </Grid>
- <Grid Width="50" Height="30">
- <TextBlock Text="" VerticalAlignment="Center" HorizontalAlignment="Center" /> </Grid>
- <Grid Width="50" Height="30">
- <TextBlock Text="" VerticalAlignment="Center" HorizontalAlignment="Center" /> </Grid>
- <Grid Width="50" Height="30">
- <TextBlock Text="" VerticalAlignment="Center" HorizontalAlignment="Center" /> </Grid>
- <Grid Width="50" Height="30">
- <TextBlock Text="" VerticalAlignment="Center" HorizontalAlignment="Center" /> </Grid>
- <Grid Width="50" Height="30">
- <TextBlock Text="" VerticalAlignment="Center" HorizontalAlignment="Center" /> </Grid>
- <Grid Width="50" Height="30">
- <TextBlock Text="" VerticalAlignment="Center" HorizontalAlignment="Center" /> </Grid>
- </StackPanel>
- <StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
- <Grid Width="50" Height="30">
- <TextBlock Text="" VerticalAlignment="Center" HorizontalAlignment="Center" /> </Grid>
- <Grid Width="50" Height="30">
- <TextBlock Text="" VerticalAlignment="Center" HorizontalAlignment="Center" /> </Grid>
- <Grid Width="50" Height="30">
- <TextBlock Text="" VerticalAlignment="Center" HorizontalAlignment="Center" /> </Grid>
- <Grid Width="50" Height="30">
- <TextBlock Text="" VerticalAlignment="Center" HorizontalAlignment="Center" /> </Grid>
- <Grid Width="50" Height="30">
- <TextBlock Text="" VerticalAlignment="Center" HorizontalAlignment="Center" /> </Grid>
- <Grid Width="50" Height="30">
- <TextBlock Text="" VerticalAlignment="Center" HorizontalAlignment="Center" /> </Grid>
- <Grid Width="50" Height="30">
- <TextBlock Text="" VerticalAlignment="Center" HorizontalAlignment="Center" /> </Grid>
- </StackPanel>
- <StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
- <Grid Width="50" Height="30">
- <TextBlock Text="" VerticalAlignment="Center" HorizontalAlignment="Center" /> </Grid>
- <Grid Width="50" Height="30">
- <TextBlock Text="" VerticalAlignment="Center" HorizontalAlignment="Center" /> </Grid>
- <Grid Width="50" Height="30">
- <TextBlock Text="" VerticalAlignment="Center" HorizontalAlignment="Center" /> </Grid>
- <Grid Width="50" Height="30">
- <TextBlock Text="" VerticalAlignment="Center" HorizontalAlignment="Center" /> </Grid>
- <Grid Width="50" Height="30">
- <TextBlock Text="" VerticalAlignment="Center" HorizontalAlignment="Center" /> </Grid>
- <Grid Width="50" Height="30">
- <TextBlock Text="" VerticalAlignment="Center" HorizontalAlignment="Center" /> </Grid>
- <Grid Width="50" Height="30">
- <TextBlock Text="" VerticalAlignment="Center" HorizontalAlignment="Center" /> </Grid>
- </StackPanel>
- <StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
- <Grid Width="50" Height="30">
- <TextBlock Text="" VerticalAlignment="Center" HorizontalAlignment="Center" /> </Grid>
- <Grid Width="50" Height="30">
- <TextBlock Text="" VerticalAlignment="Center" HorizontalAlignment="Center" /> </Grid>
- <Grid Width="50" Height="30">
- <TextBlock Text="" VerticalAlignment="Center" HorizontalAlignment="Center" /> </Grid>
- <Grid Width="50" Height="30">
- <TextBlock Text="" VerticalAlignment="Center" HorizontalAlignment="Center" /> </Grid>
- <Grid Width="50" Height="30">
- <TextBlock Text="" VerticalAlignment="Center" HorizontalAlignment="Center" /> </Grid>
- <Grid Width="50" Height="30">
- <TextBlock Text="" VerticalAlignment="Center" HorizontalAlignment="Center" /> </Grid>
- <Grid Width="50" Height="30">
- <TextBlock Text="" VerticalAlignment="Center" HorizontalAlignment="Center" /> </Grid>
- </StackPanel>
- </StackPanel>
- </StackPanel>
- </StackPanel>
C# code
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using System.Runtime.InteropServices.WindowsRuntime;
- using Windows.Foundation;
- using Windows.Foundation.Collections;
- using Windows.UI.Xaml;
- using Windows.UI.Xaml.Controls;
- using Windows.UI.Xaml.Controls.Primitives;
- using Windows.UI.Xaml.Data;
- using Windows.UI.Xaml.Input;
- using Windows.UI.Xaml.Media;
- using Windows.UI.Xaml.Navigation;
- // The Blank Page item template is documented at http://go.microsoft.com/fwlink/?LinkId=391641
- namespace CalendarDemo
- {
- /// <summary>
- /// An empty page that can be used on its own or navigated to within a Frame.
- /// </summary>
- public sealed partial class MainPage: Page
- {
- DateTime calendarDate;
- public MainPage()
- {
- this.InitializeComponent();
- calendarDate = DateTime.Today;
- this.NavigationCacheMode = NavigationCacheMode.Required;
- }
- /// <summary>
- /// Invoked when this page is about to be displayed in a Frame.
- /// </summary>
- /// <param name="e">Event data that describes how this page was reached.
- /// This parameter is typically used to configure the page.</param>
- protected override void OnNavigatedTo(NavigationEventArgs e)
- {
- UpdateCalendar(calendarDate);
- }
- public void UpdateCalendar(DateTime objdate)
- {
- CalendarHeader.Text = objdate.ToString("MMMM yyyy");
- objdate = new DateTime(objdate.Year, objdate.Month, 1);
- int dayOfWeek = (int) objdate.DayOfWeek + 1;
- int daysOfMonth = DateTime.DaysInMonth(objdate.Year, objdate.Month);
- int i = 1;
- foreach(var o1 in Calendar.Children)
- {
- foreach(var o2 in (o1 as StackPanel).Children)
- {
- var o3 = (o2 as Grid).Children[0] as TextBlock;
- if (i >= dayOfWeek && i < (daysOfMonth + dayOfWeek))
- {
- o3.Text = (i - dayOfWeek + 1).ToString();
- }
- else
- {
- o3.Text = "";
- }
- i++;
- }
- }
- }
- private void previousMonth(object sender, RoutedEventArgs e)
- {
- calendarDate = calendarDate.AddMonths(-1);
- UpdateCalendar(calendarDate);
- }
- private void nextMonth(object sender, RoutedEventArgs e)
- {
- calendarDate = calendarDate.AddMonths(1);
- UpdateCalendar(calendarDate);
- }
- }
- }
Now run the app and show the output as in the following screenshot:


Sibeesh VenuPosted Oct 27, 2015, 8:36 AM
Nice Share
Mukesh KumarPosted Oct 27, 2015, 7:39 AM
Good Job ... Thanks for sharing
Nilesh JadavPosted Oct 27, 2015, 2:58 AM
Good Share sir !!
Harshad PansuriyaPosted Oct 27, 2015, 12:12 AM
Nice one
Shridhar SharmaPosted Oct 26, 2015, 11:36 AM
nice share..it should works for windows 10 as well.
Praveen KumarPosted Oct 26, 2015, 11:06 AM
Nice Suresh!
Mahesh ChandPosted Oct 26, 2015, 9:35 AM
Does the same code works for Windows 10 or any changes? Now Microsoft is updating Windows 8.1 to Windows 10, free and pretty much automated.
Vinodh NarayananPosted Oct 26, 2015, 9:01 AM
good one