public NumericUpDown() { InitializeComponent(); baseContainer.DataContext = this; // フォーカス更新時 IsKeyboardFocusWithinChanged += (sender, e) => { // DateTimePicker内の全てのコントロールからフォーカスが離れたら if ((bool)e.NewValue == false) { var value = Parse(this, Tb.Text, Format); if (value.HasValue) { Value = value.Value; } SetText(this); } }; // マウスホイール時 MouseWheel += (sender, e) => { if (!IsKeyboardFocusWithin) { return; } if (0 < e.Delta) { Value++; } else { Value--; } e.Handled = true; }; // テキストボックス.キー入力時 Enterキー押下したらフォーカスを移動する。 Tb.PreviewKeyDown += (sender, e) => { if (e.Key != Key.Enter) { return; } var shift = (Keyboard.Modifiers & ModifierKeys.Shift) == ModifierKeys.Shift; // 次のフォーカスへ移動する。 Tb.MoveFocus(new TraversalRequest(shift ? FocusNavigationDirection.Previous : FocusNavigationDirection.Next)); // 次のフォーカスへENTERキーイベントを渡さない。 e.Handled = true; }; // テキストボックス フォーカス取得時に全選択する。 TextBoxSelectAllWhenGotFocusBehavior.SetIsEnabled(Tb, true); }
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); }