Click here to Skip to main content
15,867,594 members
Articles / Desktop Programming / WPF
Article

Analog Clock in WPF

Rate me:
Please Sign up or sign in to vote.
4.67/5 (43 votes)
17 Sep 2008CPOL 178.8K   12.5K   51   35
A simple analog clock in WPF
Analog clock in WPF

Introduction

This is an analog clock in WPF.

Using the Code

My XAML code is as follows:

XML
<Window x:Class="clock.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Clock" Margin="2" Height="327" Width="311" AllowsTransparency="True" 
        WindowStyle="None" Background="Transparent" WindowStartupLocation="CenterScreen" 
        Icon="images/clock.ico" 
        ResizeMode="NoResize" Topmost="False" Opacity="1">
    <Grid Width="300" Height="300" MouseLeftButtonDown="Grid_MouseDown">
       <Image Source="images/backGround.png"></Image>

        <Label Name="christianityCalendar" Foreground="White" 
        Margin="0, 0, 0, 52" HorizontalAlignment="Center" 
        VerticalAlignment="Bottom" Height="Auto"
         Width="Auto">Value
        </Label>
        <Label Name="persianCalendar" Foreground="White" 
        Margin="0, 0, 0, 75" HorizontalAlignment="Center" 
        VerticalAlignment="Bottom" Height="Auto" 
        Width="Auto">Value
        </Label>
        
        <!-- 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>
</Window>

My C# code is as follows:

C#
System.Timers.Timer timer = new System.Timers.Timer(1000);
public Window1()
{
    InitializeComponent();

    MDCalendar mdCalendar = new MDCalendar();
    DateTime date = DateTime.Now;
    TimeZone time = TimeZone.CurrentTimeZone;
    TimeSpan difference = time.GetUtcOffset(date);
    uint currentTime = mdCalendar.Time() + (uint)difference.TotalSeconds;
    persianCalendar.Content = mdCalendar.Date("Y/m/D  W", currentTime, true);
    christianityCalendar.Content = mdCalendar.Date("P Z/e/d", currentTime, false);

    timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
    timer.Enabled = true;
}

void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
    this.Dispatcher.Invoke(DispatcherPriority.Normal, (Action)(() =>
    {
        secondHand.Angle = DateTime.Now.Second * 6;
        minuteHand.Angle = DateTime.Now.Minute * 6;
        hourHand.Angle = (DateTime.Now.Hour * 30) + (DateTime.Now.Minute * 0.5);
    }));
}

private void Grid_MouseDown(object sender, MouseButtonEventArgs e)
{
    this.DragMove();
}

History

  • 17th September, 2008: Initial post

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Iran (Islamic Republic of) Iran (Islamic Republic of)
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions

 
QuestionI used this as a basline and made many improvements Pin
MarkyK6-May-16 6:13
MarkyK6-May-16 6:13 
AnswerRe: I used this as a basline and made many improvements Pin
ZevSpitz7-May-20 7:00
professionalZevSpitz7-May-20 7:00 
GeneralRe: I used this as a basline and made many improvements Pin
Member 1315944427-Apr-21 7:09
Member 1315944427-Apr-21 7:09 
AnswerRe: I used this as a basline and made many improvements Pin
FransClasener1-Mar-22 8:42
FransClasener1-Mar-22 8:42 
Questioncan i resize this Pin
Member 1232179114-Feb-16 4:05
Member 1232179114-Feb-16 4:05 
QuestionMDCalendar Pin
KarolinaNS7-Dec-14 2:54
KarolinaNS7-Dec-14 2:54 
AnswerRe: MDCalendar Pin
Mohammad Dayyan7-Dec-14 3:21
Mohammad Dayyan7-Dec-14 3:21 
QuestionNIce Demo Pin
pitambar sahoo10-Nov-14 19:43
pitambar sahoo10-Nov-14 19:43 
QuestionNIce Demo Pin
pitambar sahoo10-Nov-14 19:43
pitambar sahoo10-Nov-14 19:43 
Questionvery good Pin
vahidsing0083-May-14 0:43
vahidsing0083-May-14 0:43 
QuestionGood Job Man Pin
Aydin Homay21-Mar-14 3:32
Aydin Homay21-Mar-14 3:32 
SuggestionAdded code Pin
Aster Veigas9-Aug-13 10:36
Aster Veigas9-Aug-13 10:36 
Questionwhy use a System.Timers.Timer? Pin
tomtom198022-May-12 8:06
tomtom198022-May-12 8:06 
GeneralMy vote of 5 Pin
Javad Amiry7-Dec-11 4:50
Javad Amiry7-Dec-11 4:50 
GeneralMy vote of 5 Pin
Shahin Khorshidnia24-Jul-11 1:17
professionalShahin Khorshidnia24-Jul-11 1:17 
QuestionResizable? Pin
Member 77725341-Apr-11 0:00
Member 77725341-Apr-11 0:00 
AnswerRe: Resizable? Pin
Latious19-Dec-12 10:24
Latious19-Dec-12 10:24 
AnswerRe: Resizable? Pin
GeorgeMc3-Jan-15 0:49
GeorgeMc3-Jan-15 0:49 
GeneralMy vote of 3 Pin
Jyothikarthik_N23-Dec-10 18:45
Jyothikarthik_N23-Dec-10 18:45 
GeneralMy vote of 5 Pin
masoudxxx200213-Dec-10 19:57
masoudxxx200213-Dec-10 19:57 
خیلی ممنون
GeneralMy vote of 1 Pin
cpaynesai17-Oct-10 17:57
cpaynesai17-Oct-10 17:57 
GeneralMy vote of 3 Pin
NNTBIZ25-Aug-10 12:46
professionalNNTBIZ25-Aug-10 12:46 
Generalso beautiful! Pin
wanglinfu4-Jan-10 2:55
wanglinfu4-Jan-10 2:55 
GeneralEY val baba Pin
syamah24-Aug-09 5:13
syamah24-Aug-09 5:13 
GeneralRe: EY val baba Pin
Mohammad Dayyan26-Aug-09 9:16
Mohammad Dayyan26-Aug-09 9:16 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.