2012年11月29日木曜日

DispatcherTimerでデジタル時計


DispatcherTimer クラスを使って、1秒ごとに現在時刻を表示するテキストブロックのテキストを更新します。
タイマーが動作する間隔を Interval プロパティに指定します。
timer.Interval = new TimeSpan(0, 0, 1);

Tick イベントに指定した処理が、Interval の間隔ごとに呼び出されます。
timer.Tick += timer_Tick;

テキストブロックのスケールをウィンドウの横幅に比例させて、ウィンドウいっぱいにテキストが表示されるようにします。
初期状態では、ウィンドウの横幅が300で、テキストブロックのフォントサイズが0.2なので、300*0.2=60のフォントサイズになります。

ウィンドウのサイズを変えると、その大きさに比例して文字の大きさも変わります。


MainWindow.xaml


<Window x:Class="MyClock.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Height="150" Width="300">
    <TextBlock Name="textBlock1" FontSize="0.2">
        <TextBlock.RenderTransform>
            <ScaleTransform ScaleX="{Binding RelativeSource={RelativeSource FindAncestor
                                     AncestorType={x:Type Window}}, Path=ActualWidth}" 
                            ScaleY="{Binding RelativeSource={RelativeSource FindAncestor
                                     AncestorType={x:Type Window}}, Path=ActualWidth}" />
        </TextBlock.RenderTransform>
    </TextBlock>
</Window>


MainWindow.xaml.cs

using System;
using System.Windows;
using System.Windows.Threading;

namespace MyClock
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            DispatcherTimer timer = new DispatcherTimer();
            timer.Tick += timer_Tick;
            timer.Interval = new TimeSpan(0, 0, 1);
            timer.Start();
        }

        void timer_Tick(object sender, EventArgs e)
        {
            this.textBlock1.Text = DateTime.Now.ToString("HH:mm:ss");
        }
    }
}

0 件のコメント:

コメントを投稿