/// <summary> /// 获得焦点时更新要显示的文本 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void OnGotFocus(object sender, RoutedEventArgs e) { MaskBoxState state = SaveState(); _maskManager.UpdateTextAndValue(false); // 重置光标位置 _tb.SelectionLength = 0; _tb.SelectionStart = (state.SelectionStart == state.Text.Length) ? Text.Length : state.SelectionStart; }
/// <summary> /// 保存当前文本框的状态 /// </summary> /// <returns></returns> MaskBoxState SaveState() { MaskBoxState state = new MaskBoxState(); state.SelectionLength = _tb.SelectionLength; state.SelectionStart = _tb.SelectionStart; state.Text = Text; return(state); }
/// <summary> /// 键盘按下事件处理 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void OnKeyDown(object sender, KeyRoutedEventArgs e) { _inputManager.OnPreviewKeyDown(e); _isSavedStateValid = !e.Handled; if (_isSavedStateValid) { // 保存文本框当前状态 _savedState = SaveState(); } }
/// <summary> /// 加载文本框状态 /// </summary> /// <param name="p_state"></param> void RestoreState(MaskBoxState p_state) { if (p_state.Text == _tb.Text) { return; } _tb.TextChanged -= OnTextChanged; _tb.Text = p_state.Text; _tb.Select(p_state.SelectionStart, p_state.SelectionLength); _tb.TextChanged += OnTextChanged; RaiseTextChanged(null); }