[WinUI 3][TimePicker] 時刻が変更されたことを知る

スポンサーリンク

今回は、TimePicker に表示されている時刻が変更されたことを知る方法について説明します。

環境

開発環境 Microsoft Visual Studio Professional 2019 Preview
Version 16.11.0 Preview 3.0
Framework Microsoft .NET Framework Version 4.8.04084
その他 Microsoft.Project Reunion 0.8.0-preview
Microsoft.ProjectReunion.Foundation 0.8.0-preview
Microsoft.ProjectReunion.WinUI 0.8.0-preview
Microsoft.UI.Xaml 2.6.1

時刻が変更されたことを知る

TimePicker で日付が変更されたことを知るには TimeChanged イベント か SelectedTimeChanged イベントを使用します。

TimeChanged イベントは、TimePicker 上の時刻を変更した場合に発生し、SelectedTimeChanged イベントは、すでに選択されていた時刻が別の時刻に変更された場合に発生します。

どちらも「時刻が変更された」という点では同じなのですが、「選択済みの時刻」が変更されたかを知りたいかどうかで使い分けが異なります。

以下は時刻が変更されたことを知る例です。

XAML では TimePicker を1つ配置し、TimeChanged イベントと SelectedTimeChanged イベントにそれぞれイベントハンドラーを設定しています。

XAML のコード例

<Window
    x:Class="DatePickerSample.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:DatePickerSample"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">

    <StackPanel Orientation="Vertical" HorizontalAlignment="Center" VerticalAlignment="Top">
        <TimePicker x:Name="myTimePicker" 
                    TimeChanged="myTimePicker_TimeChanged"
                    SelectedTimeChanged="myTimePicker_SelectedTimeChanged"/>
    </StackPanel>
</Window>

C#のコードでは、それぞれのイベントハンドラのコードを書いています。

TimeChanged では、アプリ起動時に設定した時刻が他の時刻に変更された場合に、メッセージが作成されるようにしています。

SelectedTimeChanged では、SelectedTime プロパティに格納した時刻が変更された場合にメッセージが作成されるようにしています。

public sealed partial class MainWindow : Window
{
    private TimeSpan oldTime = new TimeSpan(12, 34, 00);

    public MainWindow()
    {
        this.InitializeComponent();
        myTimePicker.MinuteIncrement = 5;
    }

    private void myTimePicker_TimeChanged(object sender, TimePickerValueChangedEventArgs e)
    {
        if (myTimePicker.Time != oldTime) 
        { 
            var msg = "時刻が変更されました。"; 
        }
    }

    private void myTimePicker_SelectedTimeChanged(TimePicker sender, TimePickerSelectedValueChangedEventArgs args)
    {
        if (myTimePicker.SelectedTime != null && myTimePicker.SelectedTime == new TimeSpan(13, 10, 00)) 
        {
            var msg = "新しい時刻が選択されました。"; 
        }
    }
}
Please follow and like us:

コメント

タイトルとURLをコピーしました