コード例 #1
0
        public DateTimePicker()
        {
            InitializeComponent();

            baseContainer.DataContext = this;

            // カレンダーで値を選択時
            CalCalendar.SelectedDatesChanged += (sender, e) =>
            {
                CalButton.IsChecked = false;
                SelectedDate        = CalCalendar.SelectedDate.Value;
            };

            // フォーカス更新時
            IsKeyboardFocusWithinChanged += (sender, e) =>
            {
                // DateTimePicker内の全てのコントロールからフォーカスが離れたら
                if ((bool)e.NewValue == false)
                {
                    var datetimes = DateFormats
                                    .Select(format => Parse(CalText.Text, format))
                                    .Where(datetime => datetime.HasValue)
                                    .ToArray();

                    if (datetimes.Any())
                    {
                        SelectedDate = datetimes.First().Value;
                    }
                    SetText(this);
                }
            };

            // テキストボックス.キー入力時 Enterキー押下したらフォーカスを移動する。
            CalText.PreviewKeyDown += (sender, e) =>
            {
                if (e.Key != Key.Enter)
                {
                    return;
                }
                var shift = (Keyboard.Modifiers & ModifierKeys.Shift) == ModifierKeys.Shift;

                // 次のフォーカスへ移動する。
                CalText.MoveFocus(new TraversalRequest(shift ? FocusNavigationDirection.Previous : FocusNavigationDirection.Next));

                // 次のフォーカスへENTERキーイベントを渡さない。
                e.Handled = true;
            };

            // テキストボックス フォーカス取得時に全選択する。
            TextBoxSelectAllWhenGotFocusBehavior.SetIsEnabled(CalText, true);
        }