WPF 標準コントロールデモアプリ › DatePicker

DatePicker Inputs

DatePicker はポップアップカレンダーを使って日付を選択できるコントロールです。選択可能な日付範囲の制限、週の始まりの曜日設定、日付の表示フォーマット変更をサポートしています。

概要

WPF の DatePicker は、テキストボックスとポップアップカレンダーを組み合わせた日付入力コントロールです。ユーザーはカレンダーをクリックして日付を選択するか、テキストボックスに直接入力できます。

SelectedDate プロパティは DateTime?(null 許容)型です。未選択の場合は null になります。MVVM では DateTime? 型の ViewModel プロパティに TwoWay バインドします。

DisplayDateStartDisplayDateEnd を設定することで、選択可能な日付範囲を制限できます。例えば、過去の日付を選択不可にする場合は DisplayDateStart="{x:Static sys:DateTime.Today}" のように設定します。

FirstDayOfWeek でカレンダーの週始まり曜日を変更できます。日本語ロケールでは月曜始まりにしたい場合が多く、FirstDayOfWeek="Monday" と設定します。

画面キャプチャ

datepicker demo screen

デモしているプロパティ

以下のプロパティが WPF 標準コントロールデモアプリでインタラクティブにデモされています。アプリ上でリアルタイムに各プロパティを変更してその動作を確認できます。

プロパティ設定値説明
SelectedDate DateTime? 現在選択されている日付を取得・設定します。MVVM では ViewModel の DateTime? プロパティに Mode=TwoWay でバインドするのが標準パターンです。ユーザーがテキストフィールドの内容を消去すると SelectedDate が null になります。はまりやすいポイント:バインド先が null 非許容の DateTime プロパティの場合、null が返るとバインドエラーになります。DatePicker のバインドには必ず DateTime?(null 許容型)を使用してください。
DisplayDate DateTime カレンダーに表示する月を設定します。DatePicker を開いた時に特定の月へプログラムから自動スクロールしたい場合(例:契約開始月に移動)に使用します。SelectedDate とは独立して動作し、DisplayDate を変えてもカレンダーの表示月が移動するだけです。はまりやすいポイント:DisplayDate を変更しても SelectedDate は変わりません。あくまでカレンダーの「見えている月」を変えるだけのため、日付を選択させたい場合は別途 SelectedDate を設定する必要があります。
DisplayDateStart / DisplayDateEnd DateTime? 選択・表示可能な日付の開始・終了を設定します。例えば今日から 1 年後までの予約受付フォームなら DisplayDateStart=Today, DisplayDateEnd=Today+1年 と組み合わせます。範囲外の日付はカレンダー上でグレーアウトされクリックできなくなります。はまりやすいポイント:これらのプロパティはカレンダー UI での表示・選択を制限しますが、ユーザーがテキストボックスに範囲外の日付を直接入力すると SelectedDate がその値になってしまう場合があります。入力検証は ViewModel 側でも別途実装してください。
FirstDayOfWeek DayOfWeek カレンダーに表示する週の始まりの曜日を設定します。文化的に日本では月曜始まり、米国では日曜始まりが一般的です。設定するとカレンダーの一番左の列の曜日が変わります。はまりやすいポイント:このプロパティは WPF レベルの設定で OS のロケール設定を自動的には参照しません。日本語アプリで月曜始まりにしたい場合は明示的に FirstDayOfWeek="Monday" を設定する必要があります。
IsDropDownOpen bool カレンダーポップアップが現在開いているかどうかを制御します。フィールドにフォーカスが当たった時にカレンダーを自動的に開くなど、プログラムから開閉を制御する場面に使用します。はまりやすいポイント:DatePicker が完全にレンダリングされる前にプログラムからドロップダウンを開こうとすると、レイアウトの問題が発生することがあります。開く処理は Loaded イベント以降で行ってください。
IsTodayHighlighted bool カレンダー上で今日の日付をハイライト表示するかどうかを制御します。デフォルトは True で、今日の日付に下線や色が付きます。過去のデータ入力など「今日」に特別な意味がない場面では false にしてハイライトを消すとスッキリした見た目になります。はまりやすいポイント:ハイライトを消しても今日の日付はクリックして選択できる有効な日付のままです。ハイライトの有無は見た目のみであり、選択可能かどうかとは無関係です。
SelectedDateFormat Short / Long テキストボックスに表示される日付のフォーマットを設定します。Short の表示例はロケールにより異なり(en-US では「1/15/2026」、ja-JP では「2026/01/15」)、Long はより詳細な形式で表示されます。はまりやすいポイント:Long フォーマットはロケール依存のため、ターゲットロケール以外では意図しない表示になる可能性があります。特定のフォーマットを確実に表示したい場合は IValueConverter を使った独自変換を検討してください。

XAML 使用例

<DatePicker SelectedDate="{Binding BirthDate, Mode=TwoWay}"
             DisplayDateStart="{Binding MinDate}"
             DisplayDateEnd="{Binding MaxDate}"
             FirstDayOfWeek="Monday"
             IsTodayHighlighted="True"
             SelectedDateFormat="Short"
             Width="160" />

主な使用例

ヒントとベストプラクティス

関連コントロール

ソースコード

このデモ画面のソースコードは GitHub で公開しています。アプリ内の「コード表示」ボタンから各プロパティの実際の XAML を確認できます。

GitHub で DatePicker のソースコードを見る →