using System; using System.Collections.Generic; using System.Linq; using System.Text; 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.Shapes; using System.ComponentModel; using System.Windows.Threading; namespace FLY.UI.OSK { /// /// Window_FullPad.xaml 的交互逻辑 /// public partial class Window_FullPad : Window, INotifyPropertyChanged, IVirtualKeyboard { private DispatcherTimer timer; private TextBox textbox = null; private bool press1st = true; FullKeyPad keypad; /// /// 全键盘 /// public Window_FullPad() { InitializeComponent(); keypad = new FullKeyPad(); timer = new DispatcherTimer(); timer.Tick += new EventHandler(timer_Tick); timer.Interval = TimeSpan.FromMilliseconds(1); } void timer_Tick(object sender, EventArgs e) { timer.Stop(); this.ShowDialog(); } public void Open(TextBox textbox) { this.textbox = textbox; this.Result = textbox.Text; timer.Start();//不能直接showdialog(), 要让事件继续传递,直到有个框出来!!! //this.ShowDialog(); } private void Window_Loaded(object sender, RoutedEventArgs e) { this.DataContext = keypad; this.textblock_result.DataContext = this; } private void button_Click(object sender, RoutedEventArgs e) { if (press1st) { press1st = false; Result = ""; } string text = ((sender as Button).Content as TextBlock).Text; Result += text; } private void button_caps_Click(object sender, RoutedEventArgs e) { keypad.IsCapsLock = !keypad.IsCapsLock; } private void button_backspace_Click(object sender, RoutedEventArgs e) { Result = ""; } private void button_close_Click(object sender, RoutedEventArgs e) { this.Close(); } private void button_123_Click(object sender, RoutedEventArgs e) { keypad.Is123 = !keypad.Is123; } private void button_space_Click(object sender, RoutedEventArgs e) { Result += " "; } private void button_enter_Click(object sender, RoutedEventArgs e) { if (this.textbox != null) { this.textbox.Text = Result; //触发失去焦点事件!!!!!!! //让 绑定的 property 生效 this.textbox.RaiseEvent(new RoutedEventArgs(TextBox.LostFocusEvent)); } this.Close(); } string result; /// /// 结果 /// public string Result { get { return result; } set { if (result != value) { result = value; NotifyPropertyChanged("Result"); } } } /// /// 通知属性改变 /// /// protected void NotifyPropertyChanged(string propertyName) { if (PropertyChanged != null) { PropertyChanged.Invoke(this, new PropertyChangedEventArgs(propertyName)); } } /// /// 属性改变事件 /// public event PropertyChangedEventHandler PropertyChanged; private void Border_MouseDown(object sender, MouseButtonEventArgs e) { this.DragMove(); } private void button_dot_Click(object sender, RoutedEventArgs e) { Result += keypad.KeyDot; } } public class FullKeyPad : INotifyPropertyChanged { string keyq; public string KeyQ { get { return keyq; } set { if (keyq != value) { keyq = value; NotifyPropertyChanged("KeyQ"); } } } string keyw; public string KeyW { get { return keyw; } set { if (keyw != value) { keyw = value; NotifyPropertyChanged("KeyW"); } } } string keye; public string KeyE { get { return keye; } set { if (keye != value) { keye = value; NotifyPropertyChanged("KeyE"); } } } string keyr; public string KeyR { get { return keyr; } set { if (keyr != value) { keyr = value; NotifyPropertyChanged("KeyR"); } } } string keyt; public string KeyT { get { return keyt; } set { if (keyt != value) { keyt = value; NotifyPropertyChanged("KeyT"); } } } string keyy; public string KeyY { get { return keyy; } set { if (keyy != value) { keyy = value; NotifyPropertyChanged("KeyY"); } } } string keyu; public string KeyU { get { return keyu; } set { if (keyu != value) { keyu = value; NotifyPropertyChanged("KeyU"); } } } string keyi; public string KeyI { get { return keyi; } set { if (keyi != value) { keyi = value; NotifyPropertyChanged("KeyI"); } } } string keyo; public string KeyO { get { return keyo; } set { if (keyo != value) { keyo = value; NotifyPropertyChanged("KeyO"); } } } string keyp; public string KeyP { get { return keyp; } set { if (keyp != value) { keyp = value; NotifyPropertyChanged("KeyP"); } } } string keya; public string KeyA { get { return keya; } set { if (keya != value) { keya = value; NotifyPropertyChanged("KeyA"); } } } string keys; public string KeyS { get { return keys; } set { if (keys != value) { keys = value; NotifyPropertyChanged("KeyS"); } } } string keyd; public string KeyD { get { return keyd; } set { if (keyd != value) { keyd = value; NotifyPropertyChanged("KeyD"); } } } string keyf; public string KeyF { get { return keyf; } set { if (keyf != value) { keyf = value; NotifyPropertyChanged("KeyF"); } } } string keyg; public string KeyG { get { return keyg; } set { if (keyg != value) { keyg = value; NotifyPropertyChanged("KeyG"); } } } string keyh; public string KeyH { get { return keyh; } set { if (keyh != value) { keyh = value; NotifyPropertyChanged("KeyH"); } } } string keyj; public string KeyJ { get { return keyj; } set { if (keyj != value) { keyj = value; NotifyPropertyChanged("KeyJ"); } } } string keyk; public string KeyK { get { return keyk; } set { if (keyk != value) { keyk = value; NotifyPropertyChanged("KeyK"); } } } string keyl; public string KeyL { get { return keyl; } set { if (keyl != value) { keyl = value; NotifyPropertyChanged("KeyL"); } } } string keyz; public string KeyZ { get { return keyz; } set { if (keyz != value) { keyz = value; NotifyPropertyChanged("KeyZ"); } } } string keyx; public string KeyX { get { return keyx; } set { if (keyx != value) { keyx = value; NotifyPropertyChanged("KeyX"); } } } string keyc; public string KeyC { get { return keyc; } set { if (keyc != value) { keyc = value; NotifyPropertyChanged("KeyC"); } } } string keyv; public string KeyV { get { return keyv; } set { if (keyv != value) { keyv = value; NotifyPropertyChanged("KeyV"); } } } string keyb; public string KeyB { get { return keyb; } set { if (keyb != value) { keyb = value; NotifyPropertyChanged("KeyB"); } } } string keyn; public string KeyN { get { return keyn; } set { if (keyn != value) { keyn = value; NotifyPropertyChanged("KeyN"); } } } string keym; public string KeyM { get { return keym; } set { if (keym != value) { keym = value; NotifyPropertyChanged("KeyM"); } } } bool isCapsLock; public bool IsCapsLock { get { return isCapsLock; } set { if (isCapsLock != value) { isCapsLock = value; NotifyPropertyChanged("IsCapsLock"); } } } bool is123; public bool Is123 { get { return is123; } set { if (is123 != value) { is123 = value; NotifyPropertyChanged("Is123"); } } } string keydot; public string KeyDot { get { return keydot; } set { if (keydot != value) { keydot = value; NotifyPropertyChanged("KeyDot"); } } } public FullKeyPad() { IsCapsLock = false; Is123 = false; UpdateKey(); this.PropertyChanged += new PropertyChangedEventHandler(FullKeyPad_PropertyChanged); } void FullKeyPad_PropertyChanged(object sender, PropertyChangedEventArgs e) { if (e.PropertyName == "Is123") { UpdateKey(); } if (e.PropertyName == "IsCapsLock") { UpdateKey(); } } void UpdateKey() { if (Is123) { To123(); } else { if (IsCapsLock) ToUpper(); else ToLower(); } } void To123() { KeyQ = "1"; KeyW = "2"; KeyE = "3"; KeyR = "4"; KeyT = "5"; KeyY = "6"; KeyU = "7"; KeyI = "8"; KeyO = "9"; KeyP = "0"; KeyA = "!"; KeyS = "@"; KeyD = "#"; KeyF = "$"; KeyG = "%"; KeyH = "&"; KeyJ = "*"; KeyK = "("; KeyL = ")"; KeyZ = "'"; KeyX = "/"; KeyC = "-"; KeyV = "_"; KeyB = ":"; KeyN = ";"; KeyM = "?"; KeyDot = "."; } void ToUpper() { KeyQ = "Q"; KeyW = "W"; KeyE = "E"; KeyR = "R"; KeyT = "T"; KeyY = "Y"; KeyU = "U"; KeyI = "I"; KeyO = "O"; KeyP = "P"; KeyA = "A"; KeyS = "S"; KeyD = "D"; KeyF = "F"; KeyG = "G"; KeyH = "H"; KeyJ = "J"; KeyK = "K"; KeyL = "L"; KeyZ = "Z"; KeyX = "X"; KeyC = "C"; KeyV = "V"; KeyB = "B"; KeyN = "N"; KeyM = "M"; KeyDot = ","; } void ToLower() { KeyQ = "q"; KeyW = "w"; KeyE = "e"; KeyR = "r"; KeyT = "t"; KeyY = "y"; KeyU = "u"; KeyI = "i"; KeyO = "o"; KeyP = "p"; KeyA = "a"; KeyS = "s"; KeyD = "d"; KeyF = "f"; KeyG = "g"; KeyH = "h"; KeyJ = "j"; KeyK = "k"; KeyL = "l"; KeyZ = "z"; KeyX = "x"; KeyC = "c"; KeyV = "v"; KeyB = "b"; KeyN = "n"; KeyM = "m"; KeyDot = ","; } protected void NotifyPropertyChanged(string propertyName) { if (PropertyChanged != null) { PropertyChanged.Invoke(this, new PropertyChangedEventArgs(propertyName)); } } public event PropertyChangedEventHandler PropertyChanged; } }