123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Runtime.CompilerServices;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows;
- using System.Windows.Controls;
- using System.Windows.Data;
- using System.Windows.Documents;
- using System.Windows.Input;
- using System.Windows.Media;
- using System.Windows.Media.Imaging;
- using System.Windows.Navigation;
- using System.Windows.Shapes;
- namespace WpfControlLibrary.NumbericTextbox
- {
- /// <summary>
- /// numTextbox.xaml 的交互逻辑
- /// </summary>
- public partial class numTextbox : UserControl
- {
- public numTextbox()
- {
- InitializeComponent();
- }
- // 定义依赖属性
- public static readonly DependencyProperty CustomTextProperty =
- DependencyProperty.Register(
- "CustomText",
- typeof(string),
- typeof(numTextbox),
- new PropertyMetadata(default(string), OnCustomTextChanged)
-
- );
- private static void OnCustomTextChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
- {
- var control = d as numTextbox;
- if ( control.Textbox.Text != e.NewValue.ToString() )
- {
-
- control.Textbox.Text = e.NewValue.ToString(); // 同步到控件内部属性
- }
- }
- // CLR 属性包装器
- public string CustomText
- {
- get { return ( string ) GetValue(CustomTextProperty); }
- set { SetValue(CustomTextProperty, value); }
- }
- private void TextBox_KeyDown(object sender, KeyEventArgs e)
- {
- TextBox txt = sender as TextBox;
- //屏蔽非法按键
- if ( ( e.Key >= Key.NumPad0 && e.Key <= Key.NumPad9 ) || e.Key == Key.Decimal )
- {
- if ( txt.Text.Contains(".") && e.Key == Key.Decimal )
- {
- e.Handled = true;
- return;
- }
- e.Handled = false;
- }
- else if ( ( ( e.Key >= Key.D0 && e.Key <= Key.D9 ) || e.Key == Key.OemPeriod ) && e.KeyboardDevice.Modifiers != ModifierKeys.Shift )
- {
- if ( txt.Text.Contains(".") && e.Key == Key.OemPeriod )
- {
- e.Handled = true;
- return;
- }
- e.Handled = false;
- }
- else
- {
- e.Handled = true;
- }
- }
- private void TextBox_TextChanged(object sender, TextChangedEventArgs e)
- {
- //屏蔽中文输入和非法字符粘贴输入
- TextBox textBox = sender as TextBox;
- TextChange[] change = new TextChange[e.Changes.Count];
- e.Changes.CopyTo(change, 0);
- int offset = change[0].Offset;
- if ( change[ 0 ].AddedLength > 0 )
- {
- double num = 0;
- if ( !Double.TryParse(textBox.Text, out num) )
- {
- textBox.Text = textBox.Text.Remove(offset, change[ 0 ].AddedLength);
- textBox.Select(offset, 0);
- }
- }
- CustomText = textBox.Text;
- }
- }
- }
|