[WinUI 3][DatePicker] カレンダーの日付が変更されたことを知る

スポンサーリンク

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

環境

開発環境 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

日付が変更されたことを知る

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

DateChanged イベントは、DatePicker 上の日付を変更した場合に発生し、SelectedDateChanged イベントは、すでに選択されていた日が別の日に変更された場合に発生します。

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

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

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

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">
        <DatePicker x:Name="myDatePicker"
                    DateChanged="myDatePicker_DateChanged"
                    SelectedDateChanged="myDatePicker_SelectedDateChanged"/>
    </StackPanel>
</Window>

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

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

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

public sealed partial class MainWindow : Window
{
    private DateTimeOffset oldDate = DateTimeOffset.Now; 

    public MainWindow()
    {
        this.InitializeComponent();
    }

    private void myDatePicker_DateChanged(object sender, DatePickerValueChangedEventArgs e)
    {
        if (myDatePicker.Date != oldDate)
        {
            var msg = "日付が変更されました。";
        }
    }

    private void myDatePicker_SelectedDateChanged(DatePicker sender, DatePickerSelectedValueChangedEventArgs args)
    {
        if (myDatePicker.SelectedDate != null && myDatePicker.SelectedDate == DateTimeOffset.Now)
        {
            var msg = "新しい日付が選択されました。";
        }

    }
}
Please follow and like us:

コメント

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