using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
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.Shapes;
using System.Windows.Threading;
namespace FLY.ControlLibrary.UI.OSK
{
///
/// WdFullKeyboard.xaml 的交互逻辑
///
///
/// WdFullKeyboard.xaml 的交互逻辑
///
///
/// Window_FullPad.xaml 的交互逻辑
///
public partial class WdFullKeyboard : Window, INotifyPropertyChanged, IVirtualKeyboard
{
private DispatcherTimer timer;
private TextBox textbox = null;
private bool press1st = true;
public bool IsPwMode { get; set; } = false;
FullKeyboardViewModel keyboard;
///
/// 全键盘
///
public WdFullKeyboard()
{
InitializeComponent();
keyboard = new FullKeyboardViewModel();
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();
}
void updateResultView()
{
if (!IsPwMode)
{
this.ResultView = this.Result;
}
else
{
string star = "";
for (int i = 0; i < this.Result.Length; i++)
{
star += "*";
}
this.ResultView = star;
}
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
this.DataContext = keyboard;
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)
{
keyboard.IsCapsLock = !keyboard.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)
{
keyboard.Is123 = !keyboard.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();
}
private string result;
///
/// 结果
///
public string Result
{
get { return result; }
set
{
if (result != value)
{
result = value;
updateResultView();
}
}
}
///
/// 正常模式时, ResultView 与 Result 一样, 密码模式时, ResultView 显示*******
///
public string ResultView { get; set; }
///
/// 属性改变事件
///
public event PropertyChangedEventHandler PropertyChanged;
private void Border_MouseDown(object sender, MouseButtonEventArgs e)
{
this.DragMove();
}
private void button_dot_Click(object sender, RoutedEventArgs e)
{
Result += keyboard.KeyDot;
}
}
public class FullKeyboardViewModel : INotifyPropertyChanged
{
public string KeyQ { get; set; }
public string KeyW { get; set; }
public string KeyE { get; set; }
public string KeyR { get; set; }
public string KeyT { get; set; }
public string KeyY { get; set; }
public string KeyU { get; set; }
public string KeyI { get; set; }
public string KeyO { get; set; }
public string KeyP { get; set; }
public string KeyA { get; set; }
public string KeyS { get; set; }
public string KeyD { get; set; }
public string KeyF { get; set; }
public string KeyG { get; set; }
public string KeyH { get; set; }
public string KeyJ { get; set; }
public string KeyK { get; set; }
public string KeyL { get; set; }
public string KeyZ { get; set; }
public string KeyX { get; set; }
public string KeyC { get; set; }
public string KeyV { get; set; }
public string KeyB { get; set; }
public string KeyN { get; set; }
public string KeyM { get; set; }
public bool IsCapsLock { get; set; }
public bool Is123 { get; set; }
public string KeyDot { get; set; }
public FullKeyboardViewModel()
{
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 = ",";
}
public event PropertyChangedEventHandler PropertyChanged;
}
}