Click here to Skip to main content
Click here to Skip to main content

Analog Clock in WPF

By , 17 Sep 2008
 
Analog clock in WPF

Introduction

This is an analog clock in WPF.

Using the Code

My XAML code is as follows:

<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:

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)

About the Author

Mohammad Dayyan
Iran (Islamic Republic Of) Iran (Islamic Republic Of)
Member
No Biography provided

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
Hint: For improved responsiveness ensure Javascript is enabled and choose 'Normal' from the Layout dropdown and hit 'Update'.
You must Sign In to use this message board.
Search this forum  
    Spacing  Noise  Layout  Per page   
Questionwhy use a System.Timers.Timer?membertomtom198022 May '12 - 8:06 
i don't get it. you use a System.Timers.Timer and marshall the UI changes to the UI thread. makes no sense to me.
updating the UI is not an intensive operation (no way close to a second) so you should use a System.Windows.Threading.DispatcherTimer instead.
GeneralMy vote of 5memberJavad Amiry7 Dec '11 - 4:50 
GeneralMy vote of 5memberShahin Khorshidnia24 Jul '11 - 1:17 
QuestionResizable?memberMember 77725341 Apr '11 - 0:00 
AnswerRe: Resizable?memberLatious19 Dec '12 - 10:24 
GeneralMy vote of 3memberJyothikarthk23 Dec '10 - 18:45 
GeneralMy vote of 5membermasoudxxx200213 Dec '10 - 19:57 
GeneralMy vote of 1membercpaynesai17 Oct '10 - 17:57 
GeneralMy vote of 3memberNNTBIZ25 Aug '10 - 12:46 
Generalso beautiful!memberwanglinfu4 Jan '10 - 2:55 
GeneralEY val babamembersyamah24 Aug '09 - 5:13 
GeneralRe: EY val babamemberMohammad Dayyan26 Aug '09 - 9:16 
GeneralSuggestionmemberDrew McGhie23 Apr '09 - 12:22 
Questionanti-alias?memberUnruled Boy23 Sep '08 - 16:52 
GeneralKhaylee MamnoonmemberJamal Alqabandi23 Sep '08 - 0:10 
GeneralRe: Khaylee MamnoonmemberMohammad Dayyan23 Sep '08 - 1:12 
GeneralGood but could be better ;)memberSiavash Mortazavi22 Sep '08 - 9:14 
GeneralRe: Good but could be better ;)memberMohammad Dayyan22 Sep '08 - 9:39 
Generalvery godmemberhassan_kahrizy20 Sep '08 - 10:59 
GeneralRe: very goodmemberMohammad Dayyan20 Sep '08 - 11:42 
GeneralReally Wonderfulmembervkuttyp20 Sep '08 - 6:41 
GeneralRe: Really WonderfulmemberMohammad Dayyan21 Sep '08 - 12:43 

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

Permalink | Advertise | Privacy | Mobile
Web02 | 2.6.130516.1 | Last Updated 17 Sep 2008
Article Copyright 2008 by Mohammad Dayyan
Everything else Copyright © CodeProject, 1999-2013
Terms of Use
Layout: fixed | fluid