Create an Analog Clock in a Windows Store Application

Create an Analog Clock in a Windows Store Application

This sample uses xaml and C# to create an analog clock in a windows store application. Xaml allows you to vary the angle of lines when drawn on the screen. I used an ellipse as the background of the clock. We will draw 3 lines for the hour, seconds, and minute hand on an analog clock. A rotate transform turns a line into the second, minute and hour hand. The transform will draw the line from the center of a circle at the angle needed to represent the time. For seconds and minutes multiply the value by 6 to get the angle for the clocks hand transform.  For hours multiply the hour by 30 to get the angle needed for the hour hand transform. I use a dispatch timer to update angle of the hands based on the current time. The dispatch timer will fire an event every second which we use to update the angle of the clocks hand. The clock could be improved by using a clock image instead of an ellipse.

 

The XAML: 

   <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}"        <Grid Width="300" Height="300"            <Ellipse Width="300" Height="300" Fill="Blue"></Ellipse> 
            <!-- Second  --> 
            <Rectangle Margin="150,0,149,150" Name="rectangleSecond"  
        Stroke="White" Height="120" VerticalAlignment="Bottom"                <Rectangle.RenderTransform                    <RotateTransform x:Name="secondHand" CenterX="0"  
                CenterY="120" Angle="0" /> 
                </Rectangle.RenderTransform> 
            </Rectangle> 
            <!----> 
         
        <!-- Minute  --> 
            <Rectangle Margin="150,49,149,151" Name="rectangleMinute"  
        Stroke="LightGreen"                <Rectangle.RenderTransform                    <RotateTransform x:Name="minuteHand" CenterX="0"  
                CenterY="100" Angle="0" /> 
                </Rectangle.RenderTransform> 
            </Rectangle> 
            <!----> 
         
        <!-- Hour  --> 
            <Rectangle Margin="150,80,149,150" Name="rectangleHour"  
        Stroke="LightYellow"                <Rectangle.RenderTransform                    <RotateTransform x:Name="hourHand" CenterX="0"  
                CenterY="70" Angle="0" /> 
                </Rectangle.RenderTransform> 
            </Rectangle> 
            <!----> 
         
    </Grid> 
    </Grid>

The C# code:

        DispatcherTimer timer = new DispatcherTimer(); 
 
        public MainPage() 
        { 
            this.InitializeComponent(); 
            timer.Interval = TimeSpan.FromSeconds(1); 
            timer.Tick += timer_Tick; 
            timer.Start();  
        } 
         
        void timer_Tick(object sender, object e) 
        { 
            secondHand.Angle = DateTime.Now.Second * 6; 
            minuteHand.Angle = DateTime.Now.Minute * 6; 
            hourHand.Angle = (DateTime.Now.Hour * 30) + (DateTime.Now.Minute * 0.5); 
        }

Other Languages

This article is also available in the following languages:

Leave a Comment
  • Please add 7 and 5 and type the answer here:
  • Post
Wiki - Revision Comment List(Revision Comment)
Sort by: Published Date | Most Recent | Most Useful
Comments
  • Balaji M Kundalam edited Revision 12. Comment: Removed extra spaces.

  • Ed Price - MSFT edited Revision 6. Comment: Trying to improve formatting on the code

  • Ed Price - MSFT edited Revision 5. Comment: Code formatting

Page 1 of 1 (3 items)
Wikis - Comment List
Sort by: Published Date | Most Recent | Most Useful
Posting comments is temporarily disabled until 10:00am PST on Saturday, December 14th. Thank you for your patience.
Comments
Page 1 of 1 (8 items)