且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

WPF 悬浮键盘

更新时间:2022-09-17 19:47:42

原文:WPF 悬浮键盘

  public class TouchScreenKeyboard : Window
    {

        #region Property & Variable & Constructor
        private static double _WidthTouchKeyboard = 830;

        public static double WidthTouchKeyboard
        {
            get { return _WidthTouchKeyboard; }
            set { _WidthTouchKeyboard = value; }

        }
        private static bool _ShiftFlag;

        protected static bool ShiftFlag
        {
            get { return _ShiftFlag; }
            set { _ShiftFlag = value; }
        }

        private static bool _CapsLockFlag;

        protected static bool CapsLockFlag
        {
            get { return TouchScreenKeyboard._CapsLockFlag; }
            set { TouchScreenKeyboard._CapsLockFlag = value; }
        }

        private static Window _InstanceObject;

        private static Brush _PreviousTextBoxBackgroundBrush = null;
        private static Brush _PreviousTextBoxBorderBrush = null;
        private static Thickness _PreviousTextBoxBorderThickness;

        private static Control _CurrentControl;
        public static string TouchScreenText
        {
            get
            {
                if (_CurrentControl is TextBox)
                {
                    return ((TextBox)_CurrentControl).Text;
                }
                else if (_CurrentControl is PasswordBox)
                {
                    return ((PasswordBox)_CurrentControl).Password;
                }
                else return "";


            }
            set
            {
                if (_CurrentControl is TextBox)
                {
                    ((TextBox)_CurrentControl).Text = value;
                }
                else if (_CurrentControl is PasswordBox)
                {
                    ((PasswordBox)_CurrentControl).Password = value;
                }


            }

        }

        public static RoutedUICommand CmdTlide = new RoutedUICommand();
        public static RoutedUICommand Cmd1 = new RoutedUICommand();
        public static RoutedUICommand Cmd2 = new RoutedUICommand();
        public static RoutedUICommand Cmd3 = new RoutedUICommand();
        public static RoutedUICommand Cmd4 = new RoutedUICommand();
        public static RoutedUICommand Cmd5 = new RoutedUICommand();
        public static RoutedUICommand Cmd6 = new RoutedUICommand();
        public static RoutedUICommand Cmd7 = new RoutedUICommand();
        public static RoutedUICommand Cmd8 = new RoutedUICommand();
        public static RoutedUICommand Cmd9 = new RoutedUICommand();
        public static RoutedUICommand Cmd0 = new RoutedUICommand();
        public static RoutedUICommand CmdMinus = new RoutedUICommand();
        public static RoutedUICommand CmdPlus = new RoutedUICommand();
        public static RoutedUICommand CmdBackspace = new RoutedUICommand();


        public static RoutedUICommand CmdTab = new RoutedUICommand();
        public static RoutedUICommand CmdQ = new RoutedUICommand();
        public static RoutedUICommand Cmdw = new RoutedUICommand();
        public static RoutedUICommand CmdE = new RoutedUICommand();
        public static RoutedUICommand CmdR = new RoutedUICommand();
        public static RoutedUICommand CmdT = new RoutedUICommand();
        public static RoutedUICommand CmdY = new RoutedUICommand();
        public static RoutedUICommand CmdU = new RoutedUICommand();
        public static RoutedUICommand CmdI = new RoutedUICommand();
        public static RoutedUICommand CmdO = new RoutedUICommand();
        public static RoutedUICommand CmdP = new RoutedUICommand();
        public static RoutedUICommand CmdOpenCrulyBrace = new RoutedUICommand();
        public static RoutedUICommand CmdEndCrultBrace = new RoutedUICommand();
        public static RoutedUICommand CmdOR = new RoutedUICommand();

        public static RoutedUICommand CmdCapsLock = new RoutedUICommand();
        public static RoutedUICommand CmdA = new RoutedUICommand();
        public static RoutedUICommand CmdS = new RoutedUICommand();
        public static RoutedUICommand CmdD = new RoutedUICommand();
        public static RoutedUICommand CmdF = new RoutedUICommand();
        public static RoutedUICommand CmdG = new RoutedUICommand();
        public static RoutedUICommand CmdH = new RoutedUICommand();
        public static RoutedUICommand CmdJ = new RoutedUICommand();
        public static RoutedUICommand CmdK = new RoutedUICommand();
        public static RoutedUICommand CmdL = new RoutedUICommand();
        public static RoutedUICommand CmdColon = new RoutedUICommand();
        public static RoutedUICommand CmdDoubleInvertedComma = new RoutedUICommand();
        public static RoutedUICommand CmdEnter = new RoutedUICommand();

        public static RoutedUICommand CmdShift = new RoutedUICommand();
        public static RoutedUICommand CmdZ = new RoutedUICommand();
        public static RoutedUICommand CmdX = new RoutedUICommand();
        public static RoutedUICommand CmdC = new RoutedUICommand();
        public static RoutedUICommand CmdV = new RoutedUICommand();
        public static RoutedUICommand CmdB = new RoutedUICommand();
        public static RoutedUICommand CmdN = new RoutedUICommand();
        public static RoutedUICommand CmdM = new RoutedUICommand();
        public static RoutedUICommand CmdGreaterThan = new RoutedUICommand();
        public static RoutedUICommand CmdLessThan = new RoutedUICommand();
        public static RoutedUICommand CmdQuestion = new RoutedUICommand();



        public static RoutedUICommand CmdSpaceBar = new RoutedUICommand();
        public static RoutedUICommand CmdClear = new RoutedUICommand();



        public TouchScreenKeyboard()
        {
            this.Width = WidthTouchKeyboard;
        }

        static TouchScreenKeyboard()
        {
            DefaultStyleKeyProperty.OverrideMetadata(typeof(TouchScreenKeyboard), new FrameworkPropertyMetadata(typeof(TouchScreenKeyboard)));

            SetCommandBinding();
        }
        #endregion
        #region CommandRelatedCode
        private static void SetCommandBinding()
        {
            CommandBinding CbTlide = new CommandBinding(CmdTlide, RunCommand);
            CommandBinding Cb1 = new CommandBinding(Cmd1, RunCommand);
            CommandBinding Cb2 = new CommandBinding(Cmd2, RunCommand);
            CommandBinding Cb3 = new CommandBinding(Cmd3, RunCommand);
            CommandBinding Cb4 = new CommandBinding(Cmd4, RunCommand);
            CommandBinding Cb5 = new CommandBinding(Cmd5, RunCommand);
            CommandBinding Cb6 = new CommandBinding(Cmd6, RunCommand);
            CommandBinding Cb7 = new CommandBinding(Cmd7, RunCommand);
            CommandBinding Cb8 = new CommandBinding(Cmd8, RunCommand);
            CommandBinding Cb9 = new CommandBinding(Cmd9, RunCommand);
            CommandBinding Cb0 = new CommandBinding(Cmd0, RunCommand);
            CommandBinding CbMinus = new CommandBinding(CmdMinus, RunCommand);
            CommandBinding CbPlus = new CommandBinding(CmdPlus, RunCommand);
            CommandBinding CbBackspace = new CommandBinding(CmdBackspace, RunCommand);

            CommandManager.RegisterClassCommandBinding(typeof(TouchScreenKeyboard), CbTlide);
            CommandManager.RegisterClassCommandBinding(typeof(TouchScreenKeyboard), Cb1);
            CommandManager.RegisterClassCommandBinding(typeof(TouchScreenKeyboard), Cb2);
            CommandManager.RegisterClassCommandBinding(typeof(TouchScreenKeyboard), Cb3);
            CommandManager.RegisterClassCommandBinding(typeof(TouchScreenKeyboard), Cb4);
            CommandManager.RegisterClassCommandBinding(typeof(TouchScreenKeyboard), Cb5);
            CommandManager.RegisterClassCommandBinding(typeof(TouchScreenKeyboard), Cb6);
            CommandManager.RegisterClassCommandBinding(typeof(TouchScreenKeyboard), Cb7);
            CommandManager.RegisterClassCommandBinding(typeof(TouchScreenKeyboard), Cb8);
            CommandManager.RegisterClassCommandBinding(typeof(TouchScreenKeyboard), Cb9);
            CommandManager.RegisterClassCommandBinding(typeof(TouchScreenKeyboard), Cb0);
            CommandManager.RegisterClassCommandBinding(typeof(TouchScreenKeyboard), CbMinus);
            CommandManager.RegisterClassCommandBinding(typeof(TouchScreenKeyboard), CbPlus);
            CommandManager.RegisterClassCommandBinding(typeof(TouchScreenKeyboard), CbBackspace);


            CommandBinding CbTab = new CommandBinding(CmdTab, RunCommand);
            CommandBinding CbQ = new CommandBinding(CmdQ, RunCommand);
            CommandBinding Cbw = new CommandBinding(Cmdw, RunCommand);
            CommandBinding CbE = new CommandBinding(CmdE, RunCommand);
            CommandBinding CbR = new CommandBinding(CmdR, RunCommand);
            CommandBinding CbT = new CommandBinding(CmdT, RunCommand);
            CommandBinding CbY = new CommandBinding(CmdY, RunCommand);
            CommandBinding CbU = new CommandBinding(CmdU, RunCommand);
            CommandBinding CbI = new CommandBinding(CmdI, RunCommand);
            CommandBinding Cbo = new CommandBinding(CmdO, RunCommand);
            CommandBinding CbP = new CommandBinding(CmdP, RunCommand);
            CommandBinding CbOpenCrulyBrace = new CommandBinding(CmdOpenCrulyBrace, RunCommand);
            CommandBinding CbEndCrultBrace = new CommandBinding(CmdEndCrultBrace, RunCommand);
            CommandBinding CbOR = new CommandBinding(CmdOR, RunCommand);

            CommandBinding CbCapsLock = new CommandBinding(CmdCapsLock, RunCommand);
            CommandBinding CbA = new CommandBinding(CmdA, RunCommand);
            CommandBinding CbS = new CommandBinding(CmdS, RunCommand);
            CommandBinding CbD = new CommandBinding(CmdD, RunCommand);
            CommandBinding CbF = new CommandBinding(CmdF, RunCommand);
            CommandBinding CbG = new CommandBinding(CmdG, RunCommand);
            CommandBinding CbH = new CommandBinding(CmdH, RunCommand);
            CommandBinding CbJ = new CommandBinding(CmdJ, RunCommand);
            CommandBinding CbK = new CommandBinding(CmdK, RunCommand);
            CommandBinding CbL = new CommandBinding(CmdL, RunCommand);
            CommandBinding CbColon = new CommandBinding(CmdColon, RunCommand);
            CommandBinding CbDoubleInvertedComma = new CommandBinding(CmdDoubleInvertedComma, RunCommand);
            CommandBinding CbEnter = new CommandBinding(CmdEnter, RunCommand);

            CommandBinding CbShift = new CommandBinding(CmdShift, RunCommand);
            CommandBinding CbZ = new CommandBinding(CmdZ, RunCommand);
            CommandBinding CbX = new CommandBinding(CmdX, RunCommand);
            CommandBinding CbC = new CommandBinding(CmdC, RunCommand);
            CommandBinding CbV = new CommandBinding(CmdV, RunCommand);
            CommandBinding CbB = new CommandBinding(CmdB, RunCommand);
            CommandBinding CbN = new CommandBinding(CmdN, RunCommand);
            CommandBinding CbM = new CommandBinding(CmdM, RunCommand);
            CommandBinding CbGreaterThan = new CommandBinding(CmdGreaterThan, RunCommand);
            CommandBinding CbLessThan = new CommandBinding(CmdLessThan, RunCommand);
            CommandBinding CbQuestion = new CommandBinding(CmdQuestion, RunCommand);



            CommandBinding CbSpaceBar = new CommandBinding(CmdSpaceBar, RunCommand);
            CommandBinding CbClear = new CommandBinding(CmdClear, RunCommand);

            CommandManager.RegisterClassCommandBinding(typeof(TouchScreenKeyboard), CbTab);
            CommandManager.RegisterClassCommandBinding(typeof(TouchScreenKeyboard), CbQ);
            CommandManager.RegisterClassCommandBinding(typeof(TouchScreenKeyboard), Cbw);
            CommandManager.RegisterClassCommandBinding(typeof(TouchScreenKeyboard), CbE);
            CommandManager.RegisterClassCommandBinding(typeof(TouchScreenKeyboard), CbR);
            CommandManager.RegisterClassCommandBinding(typeof(TouchScreenKeyboard), CbT);
            CommandManager.RegisterClassCommandBinding(typeof(TouchScreenKeyboard), CbY);
            CommandManager.RegisterClassCommandBinding(typeof(TouchScreenKeyboard), CbU);
            CommandManager.RegisterClassCommandBinding(typeof(TouchScreenKeyboard), CbI);
            CommandManager.RegisterClassCommandBinding(typeof(TouchScreenKeyboard), Cbo);
            CommandManager.RegisterClassCommandBinding(typeof(TouchScreenKeyboard), CbP);
            CommandManager.RegisterClassCommandBinding(typeof(TouchScreenKeyboard), CbOpenCrulyBrace);
            CommandManager.RegisterClassCommandBinding(typeof(TouchScreenKeyboard), CbEndCrultBrace);
            CommandManager.RegisterClassCommandBinding(typeof(TouchScreenKeyboard), CbOR);

            CommandManager.RegisterClassCommandBinding(typeof(TouchScreenKeyboard), CbCapsLock);
            CommandManager.RegisterClassCommandBinding(typeof(TouchScreenKeyboard), CbA);
            CommandManager.RegisterClassCommandBinding(typeof(TouchScreenKeyboard), CbS);
            CommandManager.RegisterClassCommandBinding(typeof(TouchScreenKeyboard), CbD);
            CommandManager.RegisterClassCommandBinding(typeof(TouchScreenKeyboard), CbF);
            CommandManager.RegisterClassCommandBinding(typeof(TouchScreenKeyboard), CbG);
            CommandManager.RegisterClassCommandBinding(typeof(TouchScreenKeyboard), CbH);
            CommandManager.RegisterClassCommandBinding(typeof(TouchScreenKeyboard), CbJ);
            CommandManager.RegisterClassCommandBinding(typeof(TouchScreenKeyboard), CbK);
            CommandManager.RegisterClassCommandBinding(typeof(TouchScreenKeyboard), CbL);
            CommandManager.RegisterClassCommandBinding(typeof(TouchScreenKeyboard), CbColon);
            CommandManager.RegisterClassCommandBinding(typeof(TouchScreenKeyboard), CbDoubleInvertedComma);
            CommandManager.RegisterClassCommandBinding(typeof(TouchScreenKeyboard), CbEnter);

            CommandManager.RegisterClassCommandBinding(typeof(TouchScreenKeyboard), CbShift);
            CommandManager.RegisterClassCommandBinding(typeof(TouchScreenKeyboard), CbZ);
            CommandManager.RegisterClassCommandBinding(typeof(TouchScreenKeyboard), CbX);
            CommandManager.RegisterClassCommandBinding(typeof(TouchScreenKeyboard), CbC);
            CommandManager.RegisterClassCommandBinding(typeof(TouchScreenKeyboard), CbV);
            CommandManager.RegisterClassCommandBinding(typeof(TouchScreenKeyboard), CbB);
            CommandManager.RegisterClassCommandBinding(typeof(TouchScreenKeyboard), CbN);
            CommandManager.RegisterClassCommandBinding(typeof(TouchScreenKeyboard), CbM);
            CommandManager.RegisterClassCommandBinding(typeof(TouchScreenKeyboard), CbGreaterThan);
            CommandManager.RegisterClassCommandBinding(typeof(TouchScreenKeyboard), CbLessThan);
            CommandManager.RegisterClassCommandBinding(typeof(TouchScreenKeyboard), CbQuestion);



            CommandManager.RegisterClassCommandBinding(typeof(TouchScreenKeyboard), CbSpaceBar);
            CommandManager.RegisterClassCommandBinding(typeof(TouchScreenKeyboard), CbClear);

        }
        static void RunCommand(object sender, ExecutedRoutedEventArgs e)
        {

            if (e.Command == CmdTlide)  //First Row
            {


                if (!ShiftFlag)
                {
                    TouchScreenKeyboard.TouchScreenText += "`";
                }
                else
                {
                    TouchScreenKeyboard.TouchScreenText += "~";
                    ShiftFlag = false;
                }
            }
            else if (e.Command == Cmd1)
            {
                if (!ShiftFlag)
                {
                    TouchScreenKeyboard.TouchScreenText += "1";
                }
                else
                {
                    TouchScreenKeyboard.TouchScreenText += "!";
                    ShiftFlag = false;
                }

            }
            else if (e.Command == Cmd2)
            {
                if (!ShiftFlag)
                {
                    TouchScreenKeyboard.TouchScreenText += "2";
                }
                else
                {
                    TouchScreenKeyboard.TouchScreenText += "@";
                    ShiftFlag = false;
                }

            }
            else if (e.Command == Cmd3)
            {
                if (!ShiftFlag)
                {
                    TouchScreenKeyboard.TouchScreenText += "3";
                }
                else
                {
                    TouchScreenKeyboard.TouchScreenText += "#";
                    ShiftFlag = false;
                }

            }
            else if (e.Command == Cmd4)
            {
                if (!ShiftFlag)
                {
                    TouchScreenKeyboard.TouchScreenText += "4";
                }
                else
                {
                    TouchScreenKeyboard.TouchScreenText += "$";
                    ShiftFlag = false;
                }

            }
            else if (e.Command == Cmd5)
            {
                if (!ShiftFlag)
                {
                    TouchScreenKeyboard.TouchScreenText += "5";
                }
                else
                {
                    TouchScreenKeyboard.TouchScreenText += "%";
                    ShiftFlag = false;
                }

            }
            else if (e.Command == Cmd6)
            {
                if (!ShiftFlag)
                {
                    TouchScreenKeyboard.TouchScreenText += "6";
                }
                else
                {
                    TouchScreenKeyboard.TouchScreenText += "^";
                    ShiftFlag = false;
                }

            }
            else if (e.Command == Cmd7)
            {
                if (!ShiftFlag)
                {
                    TouchScreenKeyboard.TouchScreenText += "7";
                }
                else
                {
                    TouchScreenKeyboard.TouchScreenText += "&";
                    ShiftFlag = false;
                }

            }
            else if (e.Command == Cmd8)
            {
                if (!ShiftFlag)
                {
                    TouchScreenKeyboard.TouchScreenText += "8";
                }
                else
                {
                    TouchScreenKeyboard.TouchScreenText += "*";
                    ShiftFlag = false;
                }

            }
            else if (e.Command == Cmd9)
            {
                if (!ShiftFlag)
                {
                    TouchScreenKeyboard.TouchScreenText += "9";
                }
                else
                {
                    TouchScreenKeyboard.TouchScreenText += "(";
                    ShiftFlag = false;
                }

            }
            else if (e.Command == Cmd0)
            {
                if (!ShiftFlag)
                {
                    TouchScreenKeyboard.TouchScreenText += "0";
                }
                else
                {
                    TouchScreenKeyboard.TouchScreenText += ")";
                    ShiftFlag = false;
                }

            }
            else if (e.Command == CmdMinus)
            {
                if (!ShiftFlag)
                {
                    TouchScreenKeyboard.TouchScreenText += "-";
                }
                else
                {
                    TouchScreenKeyboard.TouchScreenText += "_";
                    ShiftFlag = false;
                }

            }
            else if (e.Command == CmdPlus)
            {
                if (!ShiftFlag)
                {
                    TouchScreenKeyboard.TouchScreenText += "=";
                }
                else
                {
                    TouchScreenKeyboard.TouchScreenText += "+";
                    ShiftFlag = false;
                }

            }
            else if (e.Command == CmdBackspace)
            {
                if (!string.IsNullOrEmpty(TouchScreenKeyboard.TouchScreenText))
                {
                    TouchScreenKeyboard.TouchScreenText = TouchScreenKeyboard.TouchScreenText.Substring(0, TouchScreenKeyboard.TouchScreenText.Length - 1);
                }

            }
            else if (e.Command == CmdTab)  //Second Row
            {
                TouchScreenKeyboard.TouchScreenText += "     ";
            }
            else if (e.Command == CmdQ)
            {
                AddKeyBoardINput('Q');
            }
            else if (e.Command == Cmdw)
            {
                AddKeyBoardINput('w');
            }
            else if (e.Command == CmdE)
            {
                AddKeyBoardINput('E');
            }
            else if (e.Command == CmdR)
            {
                AddKeyBoardINput('R');
            }
            else if (e.Command == CmdT)
            {
                AddKeyBoardINput('T');
            }
            else if (e.Command == CmdY)
            {
                AddKeyBoardINput('Y');
            }
            else if (e.Command == CmdU)
            {
                AddKeyBoardINput('U');

            }
            else if (e.Command == CmdI)
            {
                AddKeyBoardINput('I');
            }
            else if (e.Command == CmdO)
            {
                AddKeyBoardINput('O');
            }
            else if (e.Command == CmdP)
            {
                AddKeyBoardINput('P');
            }
            else if (e.Command == CmdOpenCrulyBrace)
            {
                if (!ShiftFlag)
                {
                    TouchScreenKeyboard.TouchScreenText += "[";
                }
                else
                {
                    TouchScreenKeyboard.TouchScreenText += "{";
                    ShiftFlag = false;
                }
            }
            else if (e.Command == CmdEndCrultBrace)
            {
                if (!ShiftFlag)
                {
                    TouchScreenKeyboard.TouchScreenText += "]";
                }
                else
                {
                    TouchScreenKeyboard.TouchScreenText += "}";
                    ShiftFlag = false;
                }
            }
            else if (e.Command == CmdOR)
            {
                if (!ShiftFlag)
                {
                    TouchScreenKeyboard.TouchScreenText += @"\";
                }
                else
                {
                    TouchScreenKeyboard.TouchScreenText += "|";
                    ShiftFlag = false;
                }
            }
            else if (e.Command == CmdCapsLock)  ///Third ROw
            {

                if (!CapsLockFlag)
                {
                    CapsLockFlag = true;
                }
                else
                {
                    CapsLockFlag = false;

                }
            }
            else if (e.Command == CmdA)
            {
                AddKeyBoardINput('A');
            }
            else if (e.Command == CmdS)
            {
                AddKeyBoardINput('S');
            }
            else if (e.Command == CmdD)
            {
                AddKeyBoardINput('D');
            }
            else if (e.Command == CmdF)
            {
                AddKeyBoardINput('F');
            }
            else if (e.Command == CmdG)
            {
                AddKeyBoardINput('G');
            }
            else if (e.Command == CmdH)
            {
                AddKeyBoardINput('H');
            }
            else if (e.Command == CmdJ)
            {
                AddKeyBoardINput('J');
            }
            else if (e.Command == CmdK)
            {
                AddKeyBoardINput('K');
            }
            else if (e.Command == CmdL)
            {
                AddKeyBoardINput('L');

            }
            else if (e.Command == CmdColon)
            {
                if (!ShiftFlag)
                {
                    TouchScreenKeyboard.TouchScreenText += ";";
                }
                else
                {
                    TouchScreenKeyboard.TouchScreenText += ":";
                    ShiftFlag = false;
                }

            }
            else if (e.Command == CmdDoubleInvertedComma)
            {
                if (!ShiftFlag)
                {
                    TouchScreenKeyboard.TouchScreenText += "'";
                }
                else
                {
                    TouchScreenKeyboard.TouchScreenText += Char.ConvertFromUtf32(34);
                    ShiftFlag = false;
                }


            }
            else if (e.Command == CmdEnter)
            {
                if (_InstanceObject != null)
                {
                    _InstanceObject.Close();
                    _InstanceObject = null;
                }
                _CurrentControl.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));


            }
            else if (e.Command == CmdShift) //Fourth Row
            {

                ShiftFlag = true; ;


            }
            else if (e.Command == CmdZ)
            {
                AddKeyBoardINput('Z');

            }
            else if (e.Command == CmdX)
            {
                AddKeyBoardINput('X');

            }
            else if (e.Command == CmdC)
            {
                AddKeyBoardINput('C');

            }
            else if (e.Command == CmdV)
            {
                AddKeyBoardINput('V');

            }
            else if (e.Command == CmdB)
            {
                AddKeyBoardINput('B');

            }
            else if (e.Command == CmdN)
            {
                AddKeyBoardINput('N');

            }
            else if (e.Command == CmdM)
            {
                AddKeyBoardINput('M');

            }
            else if (e.Command == CmdLessThan)
            {
                if (!ShiftFlag)
                {
                    TouchScreenKeyboard.TouchScreenText += ",";
                }
                else
                {
                    TouchScreenKeyboard.TouchScreenText += "<";
                    ShiftFlag = false;
                }

            }
            else if (e.Command == CmdGreaterThan)
            {
                if (!ShiftFlag)
                {
                    TouchScreenKeyboard.TouchScreenText += ".";
                }
                else
                {
                    TouchScreenKeyboard.TouchScreenText += ">";
                    ShiftFlag = false;
                }

            }
            else if (e.Command == CmdQuestion)
            {
                if (!ShiftFlag)
                {
                    TouchScreenKeyboard.TouchScreenText += "/";
                }
                else
                {
                    TouchScreenKeyboard.TouchScreenText += "?";
                    ShiftFlag = false;
                }

            }
            else if (e.Command == CmdSpaceBar)//Last row
            {

                TouchScreenKeyboard.TouchScreenText += " ";
            }
            else if (e.Command == CmdClear)//Last row
            {

                TouchScreenKeyboard.TouchScreenText = "";
            }
        }
        #endregion
        #region Main Functionality
        private static void AddKeyBoardINput(char input)
        {
            if (CapsLockFlag)
            {
                if (ShiftFlag)
                {
                    TouchScreenKeyboard.TouchScreenText += char.ToLower(input).ToString();
                    ShiftFlag = false;

                }
                else
                {
                    TouchScreenKeyboard.TouchScreenText += char.ToUpper(input).ToString();
                }
            }
            else
            {
                if (!ShiftFlag)
                {
                    TouchScreenKeyboard.TouchScreenText += char.ToLower(input).ToString();
                }
                else
                {
                    TouchScreenKeyboard.TouchScreenText += char.ToUpper(input).ToString();
                    ShiftFlag = false;
                }
            }
        }


        private static void syncchild()
        {
            if (_CurrentControl != null && _InstanceObject != null)
            {
                try
                {
                    Point virtualpoint = new Point(0, _CurrentControl.ActualHeight + 3);
                    Point Actualpoint = _CurrentControl.PointToScreen(virtualpoint);

                    if (Actualpoint.Y > 1000)
                    {
                        Actualpoint.Y = 800;
                    }
                    if (WidthTouchKeyboard + Actualpoint.X > SystemParameters.VirtualScreenWidth)
                    {
                        double difference = WidthTouchKeyboard + Actualpoint.X - SystemParameters.VirtualScreenWidth;
                        _InstanceObject.Left = Actualpoint.X - difference;
                    }
                    else if (!(Actualpoint.X > 1))
                    {
                        _InstanceObject.Left = 1;
                    }
                    else
                        _InstanceObject.Left = 140;
                    _InstanceObject.Top = Actualpoint.Y;
                    _InstanceObject.Show();
                }
                catch (Exception)
                {

                    return;
                }



            }


        }

        public static bool GetTouchScreenKeyboard(DependencyObject obj)
        {
            return (bool)obj.GetValue(TouchScreenKeyboardProperty);
        }

        public static void SetTouchScreenKeyboard(DependencyObject obj, bool value)
        {
            obj.SetValue(TouchScreenKeyboardProperty, value);
        }

        public static readonly DependencyProperty TouchScreenKeyboardProperty =
            DependencyProperty.RegisterAttached("TouchScreenKeyboard", typeof(bool), typeof(TouchScreenKeyboard), new UIPropertyMetadata(default(bool), TouchScreenKeyboardPropertyChanged));



        static void TouchScreenKeyboardPropertyChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
        {
            FrameworkElement host = sender as FrameworkElement;
            if (host != null)
            {
                host.GotFocus += new RoutedEventHandler(OnGotFocus);
                host.LostFocus += new RoutedEventHandler(OnLostFocus);
            }

        }



        static void OnGotFocus(object sender, RoutedEventArgs e)
        {
            Control host = sender as Control;

            _PreviousTextBoxBackgroundBrush = host.Background;
            _PreviousTextBoxBorderBrush = host.BorderBrush;
            _PreviousTextBoxBorderThickness = host.BorderThickness;

            host.Background = Brushes.White;
            host.BorderBrush = Brushes.Black;
            host.BorderThickness = new Thickness(4);


            _CurrentControl = host;

            if (_InstanceObject == null)
            {
                FrameworkElement ct = host;
                while (true)
                {
                    if (ct is Window)
                    {
                        ((Window)ct).LocationChanged += new EventHandler(TouchScreenKeyboard_LocationChanged);
                        ((Window)ct).Activated += new EventHandler(TouchScreenKeyboard_Activated);
                        ((Window)ct).Deactivated += new EventHandler(TouchScreenKeyboard_Deactivated);
                        break;
                    }
                    ct = (FrameworkElement)ct.Parent;
                }

                _InstanceObject = new TouchScreenKeyboard();
                _InstanceObject.AllowsTransparency = true;
                _InstanceObject.WindowStyle = WindowStyle.None;
                _InstanceObject.ShowInTaskbar = false;
                _InstanceObject.ShowInTaskbar = false;
                _InstanceObject.Topmost = true;

                host.LayoutUpdated += new EventHandler(tb_LayoutUpdated);
            }



        }

        static void TouchScreenKeyboard_Deactivated(object sender, EventArgs e)
        {
            if (_InstanceObject != null)
            {
                _InstanceObject.Topmost = false;
            }
        }

        static void TouchScreenKeyboard_Activated(object sender, EventArgs e)
        {
            if (_InstanceObject != null)
            {
                _InstanceObject.Topmost = true;
            }
        }



        static void TouchScreenKeyboard_LocationChanged(object sender, EventArgs e)
        {
            syncchild();
        }

        static void tb_LayoutUpdated(object sender, EventArgs e)
        {
            syncchild();
        }



        static void OnLostFocus(object sender, RoutedEventArgs e)
        {

            Control host = sender as Control;
            host.Background = _PreviousTextBoxBackgroundBrush;
            host.BorderBrush = _PreviousTextBoxBorderBrush;
            host.BorderThickness = _PreviousTextBoxBorderThickness;

            if (_InstanceObject != null)
            {
                _InstanceObject.Close();
                _InstanceObject = null;
            }



        }

        #endregion
    }


 

 

 

以上为CS 代码

 

下面是XAML样式

 

<ResourceDictionary
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:QinQinGo">


    <Style x:Key="MyFocusVisual">
        <Setter Property="Control.Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Control}">
                    <Grid Margin="0">
                        <Rectangle>
                            <Rectangle.Fill>
                                <ImageBrush ImageSource="/QinQinGo;component/Images/BackGround/search/sskbg.png" ></ImageBrush>
                            </Rectangle.Fill>
                        </Rectangle>
                        <Border Name="border" Width="{TemplateBinding ActualWidth}" Height="{TemplateBinding ActualHeight}"  CornerRadius="2" BorderThickness="0" />
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
        <Style.Triggers>
            <EventTrigger RoutedEvent="Control.Loaded">
                <EventTrigger.Actions>
                    <BeginStoryboard>
                        <Storyboard>
                            <DoubleAnimation
            Storyboard.TargetProperty="Opacity"
            From="0" To="1" Duration="0:0:0.5">
                            </DoubleAnimation>
                        </Storyboard>
                    </BeginStoryboard>
                </EventTrigger.Actions>
            </EventTrigger>
        </Style.Triggers>
    </Style>


    <Style x:Key="ShadowStyle">
        <Setter Property="Control.Foreground" Value="Black" />
    </Style>

    <Style x:Key="InformButton" TargetType="Button">
        <Setter Property="OverridesDefaultStyle" Value="True"/>
        <Setter Property="Margin" Value="2"/>
        <Setter Property="FontFamily" Value="Segoe WP"/>
        <Setter Property="FontSize" Value="15px"/>
        <Setter Property="FontWeight" Value="Bold"/>
        <Setter Property="FocusVisualStyle" Value="{StaticResource MyFocusVisual}" />
        <Setter Property="Background" >
            <Setter.Value>
                <LinearGradientBrush StartPoint="0,0" EndPoint="0,1" >
                    <GradientStop Color="#43655353" Offset="0.2"/>
                    <GradientStop Color="White" Offset="0.85"/>
                    <GradientStop Color="#43655353" Offset="1"/>
                </LinearGradientBrush>
            </Setter.Value>
        </Setter>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="Button">
                    <Border Name="border" 
				BorderThickness="3"
				Padding="4,2" 
				BorderBrush="#FF14A1F8" 
				CornerRadius="8" 
				Background="{TemplateBinding Background}">
                        <Grid >
                            <ContentPresenter HorizontalAlignment="Left"  
	                           VerticalAlignment="Center"  Name="contentShadow" 
					Style="{StaticResource ShadowStyle}">

                            </ContentPresenter>
                            <ContentPresenter HorizontalAlignment="Left"  
                            VerticalAlignment="Center" Name="content"/>
                        </Grid>
                    </Border>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsMouseOver" Value="True">
                            <Setter TargetName="border" Property="BorderBrush" Value="#FF4788c8" />
                            <Setter Property="Foreground" Value="#FF4788c8" />
                        </Trigger>
                        <Trigger Property="IsPressed" Value="True">
                            <Setter Property="Background" >
                                <Setter.Value>
                                    <LinearGradientBrush StartPoint="0,0" EndPoint="0,1" >
                                        <GradientStop Color="#FFFFD190" Offset="0.35"/>
                                        <GradientStop Color="Gray" Offset="0.95"/>
                                        <GradientStop Color="#FFFFD190" Offset="1"/>
                                    </LinearGradientBrush>
                                </Setter.Value>
                            </Setter>

                            <Setter TargetName="content" Property="RenderTransform" >
                                <Setter.Value>
                                    <TranslateTransform Y="1.0" />
                                </Setter.Value>
                            </Setter>
                        </Trigger>
                        <Trigger Property="IsDefaulted" Value="True">
                            <Setter TargetName="border" Property="BorderBrush" Value="#FF282828" />
                        </Trigger>
                        <Trigger Property="IsFocused" Value="True">
                            <Setter TargetName="border" Property="BorderBrush" Value="#FF282828" />
                        </Trigger>
                        <Trigger Property="IsEnabled" Value="False">
                            <Setter TargetName="border" Property="Opacity" Value="0.7" />
                            <Setter Property="Foreground" Value="Gray" />
                        </Trigger>

                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>


    <Style TargetType="{x:Type local:TouchScreenKeyboard}">
        <Setter Property="Background" Value="Transparent">
        </Setter>
        <Setter Property="Width" Value="900"/>
        <Setter Property="Height" Value="300"/>
        <Setter Property="Opacity" Value="0.7" />

        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type local:TouchScreenKeyboard}">
                    <Border Background="{TemplateBinding Background}"
                            BorderBrush="{TemplateBinding BorderBrush}"
                            CornerRadius="10"
                            BorderThickness="{TemplateBinding BorderThickness}"
                            Focusable="False" MaxHeight="290">
                        <Border BorderBrush="Black" BorderThickness="1" CornerRadius="10">
                            <Border BorderBrush="Black" BorderThickness="5" CornerRadius="10">
                                <Border BorderBrush="White" BorderThickness="2" CornerRadius="10">
                                    <StackPanel Orientation="Vertical">

                                        <StackPanel Orientation="Horizontal" >

                                            <Button Style="{StaticResource InformButton}" Command="local:TouchScreenKeyboard.CmdTlide" VerticalContentAlignment="Top" HorizontalContentAlignment="Left"  Width="50" Height="50">
                                                <StackPanel Orientation="Vertical" HorizontalAlignment="Left" VerticalAlignment="Top" >
                                                    <TextBlock    HorizontalAlignment="Left" VerticalAlignment="Top"   >~</TextBlock>
                                                    <TextBlock HorizontalAlignment="Left" VerticalAlignment="Bottom"   >`</TextBlock>
                                                </StackPanel>
                                            </Button>

                                            <Button  Command="local:TouchScreenKeyboard.Cmd1" Style="{StaticResource InformButton}" VerticalContentAlignment="Top" HorizontalContentAlignment="Left"  Width="50" Height="50">
                                                <StackPanel Orientation="Vertical" HorizontalAlignment="Left" VerticalAlignment="Top" >
                                                    <TextBlock    HorizontalAlignment="Left" VerticalAlignment="Top"   >!</TextBlock>
                                                    <TextBlock HorizontalAlignment="Left" VerticalAlignment="Bottom"   >1</TextBlock>
                                                </StackPanel>
                                            </Button>

                                            <Button Style="{StaticResource InformButton}" Command="local:TouchScreenKeyboard.Cmd2"  VerticalContentAlignment="Top" HorizontalContentAlignment="Left"  Width="50" Height="50">
                                                <StackPanel Orientation="Vertical" HorizontalAlignment="Left" VerticalAlignment="Top" >
                                                    <TextBlock    HorizontalAlignment="Left" VerticalAlignment="Top"   >@</TextBlock>
                                                    <TextBlock HorizontalAlignment="Left" VerticalAlignment="Bottom"   >2</TextBlock>
                                                </StackPanel>
                                            </Button>

                                            <Button Style="{StaticResource InformButton}" Command="local:TouchScreenKeyboard.Cmd3" VerticalContentAlignment="Top" HorizontalContentAlignment="Left"  Width="50" Height="50">
                                                <StackPanel Orientation="Vertical" HorizontalAlignment="Left" VerticalAlignment="Top" >
                                                    <TextBlock    HorizontalAlignment="Left" VerticalAlignment="Top"   >#</TextBlock>
                                                    <TextBlock HorizontalAlignment="Left" VerticalAlignment="Bottom"   >3</TextBlock>
                                                </StackPanel>
                                            </Button>
                                            <Button Style="{StaticResource InformButton}" Command="local:TouchScreenKeyboard.Cmd4" VerticalContentAlignment="Top" HorizontalContentAlignment="Left"  Width="50" Height="50">
                                                <StackPanel Orientation="Vertical" HorizontalAlignment="Left" VerticalAlignment="Top" >
                                                    <TextBlock    HorizontalAlignment="Left" VerticalAlignment="Top"   >$</TextBlock>
                                                    <TextBlock HorizontalAlignment="Left" VerticalAlignment="Bottom"   >4</TextBlock>
                                                </StackPanel>
                                            </Button>
                                            <Button Style="{StaticResource InformButton}" Command="local:TouchScreenKeyboard.Cmd5"  VerticalContentAlignment="Top" HorizontalContentAlignment="Left"  Width="50" Height="50">
                                                <StackPanel Orientation="Vertical" HorizontalAlignment="Left" VerticalAlignment="Top" >
                                                    <TextBlock    HorizontalAlignment="Left" VerticalAlignment="Top"   >%</TextBlock>
                                                    <TextBlock HorizontalAlignment="Left" VerticalAlignment="Bottom"   >5</TextBlock>
                                                </StackPanel>
                                            </Button>
                                            <Button Style="{StaticResource InformButton}" Command="local:TouchScreenKeyboard.Cmd6"  VerticalContentAlignment="Top" HorizontalContentAlignment="Left"  Width="50" Height="50">
                                                <StackPanel Orientation="Vertical" HorizontalAlignment="Left" VerticalAlignment="Top" >
                                                    <TextBlock    HorizontalAlignment="Left" VerticalAlignment="Top"   >^</TextBlock>
                                                    <TextBlock HorizontalAlignment="Left" VerticalAlignment="Bottom"   >6</TextBlock>
                                                </StackPanel>
                                            </Button>
                                            <Button Style="{StaticResource InformButton}" Command="local:TouchScreenKeyboard.Cmd7"  VerticalContentAlignment="Top" HorizontalContentAlignment="Left"  Width="50" Height="50">
                                                <StackPanel Orientation="Vertical" HorizontalAlignment="Left" VerticalAlignment="Top" >
                                                    <TextBlock    HorizontalAlignment="Left" VerticalAlignment="Top"   >&</TextBlock>
                                                    <TextBlock HorizontalAlignment="Left" VerticalAlignment="Bottom"   >7</TextBlock>
                                                </StackPanel>
                                            </Button>

                                            <Button Style="{StaticResource InformButton}" Command="local:TouchScreenKeyboard.Cmd8"  VerticalContentAlignment="Top" HorizontalContentAlignment="Left"  Width="50" Height="50">
                                                <StackPanel Orientation="Vertical" HorizontalAlignment="Left" VerticalAlignment="Top" >
                                                    <TextBlock    HorizontalAlignment="Left" VerticalAlignment="Top"   >*</TextBlock>
                                                    <TextBlock HorizontalAlignment="Left" VerticalAlignment="Bottom"   >8</TextBlock>
                                                </StackPanel>
                                            </Button>

                                            <Button Style="{StaticResource InformButton}" Command="local:TouchScreenKeyboard.Cmd9"  VerticalContentAlignment="Top" HorizontalContentAlignment="Left"  Width="50" Height="50">
                                                <StackPanel Orientation="Vertical" HorizontalAlignment="Left" VerticalAlignment="Top" >
                                                    <TextBlock    HorizontalAlignment="Left" VerticalAlignment="Top"   >(</TextBlock>
                                                    <TextBlock HorizontalAlignment="Left" VerticalAlignment="Bottom"   >9</TextBlock>
                                                </StackPanel>
                                            </Button>

                                            <Button Style="{StaticResource InformButton}"  Command="local:TouchScreenKeyboard.Cmd0" VerticalContentAlignment="Top" HorizontalContentAlignment="Left"  Width="50" Height="50">
                                                <StackPanel Orientation="Vertical" HorizontalAlignment="Left" VerticalAlignment="Top" >
                                                    <TextBlock    HorizontalAlignment="Left" VerticalAlignment="Top"   >)</TextBlock>
                                                    <TextBlock HorizontalAlignment="Left" VerticalAlignment="Bottom"   >0</TextBlock>
                                                </StackPanel>
                                            </Button>



                                            <Button Style="{StaticResource InformButton}" Command="local:TouchScreenKeyboard.CmdMinus" VerticalContentAlignment="Top" HorizontalContentAlignment="Left"  Width="50" Height="50">
                                                <StackPanel Orientation="Vertical" HorizontalAlignment="Left" VerticalAlignment="Top" >
                                                    <TextBlock    HorizontalAlignment="Left" VerticalAlignment="Top"   >--</TextBlock>
                                                    <TextBlock HorizontalAlignment="Left" VerticalAlignment="Bottom"   >-</TextBlock>
                                                </StackPanel>
                                            </Button>

                                            <Button Style="{StaticResource InformButton}" Command="local:TouchScreenKeyboard.CmdPlus"  VerticalContentAlignment="Top" HorizontalContentAlignment="Left"  Width="50" Height="50">
                                                <StackPanel Orientation="Vertical" HorizontalAlignment="Left" VerticalAlignment="Top" >
                                                    <TextBlock    HorizontalAlignment="Left" VerticalAlignment="Top"   >+</TextBlock>
                                                    <TextBlock HorizontalAlignment="Left" VerticalAlignment="Bottom"   >=</TextBlock>
                                                </StackPanel>
                                            </Button>

                                            <Button Style="{StaticResource InformButton}" Command="local:TouchScreenKeyboard.CmdBackspace"   VerticalContentAlignment="Center" HorizontalContentAlignment="Center"  Width="105" Height="50">
                                                Backspace
                                            </Button>

                                        </StackPanel>
                                        <StackPanel Orientation="Horizontal" >

                                            <Button Style="{StaticResource InformButton}" Command="local:TouchScreenKeyboard.CmdTab" VerticalContentAlignment="Top" HorizontalContentAlignment="Left"  Width="77.5" Height="50">
                                                <StackPanel Orientation="Vertical" HorizontalAlignment="Left" VerticalAlignment="Top" >
                                                    <TextBlock    HorizontalAlignment="Left" VerticalAlignment="Top"   >Tab</TextBlock>
                                                    <TextBlock HorizontalAlignment="Left" VerticalAlignment="Bottom"   ></TextBlock>
                                                </StackPanel>
                                            </Button>

                                            <Button Style="{StaticResource InformButton}" Command="local:TouchScreenKeyboard.CmdQ" VerticalContentAlignment="Top" HorizontalContentAlignment="Left"  Width="50" Height="50">
                                                <StackPanel Orientation="Vertical" HorizontalAlignment="Left" VerticalAlignment="Top" >
                                                    <TextBlock    HorizontalAlignment="Left" VerticalAlignment="Top"   >Q</TextBlock>
                                                    <TextBlock HorizontalAlignment="Left" VerticalAlignment="Bottom"   ></TextBlock>
                                                </StackPanel>
                                            </Button>

                                            <Button Style="{StaticResource InformButton}" Command="local:TouchScreenKeyboard.Cmdw"  VerticalContentAlignment="Top" HorizontalContentAlignment="Left"  Width="50" Height="50">
                                                <StackPanel Orientation="Vertical" HorizontalAlignment="Left" VerticalAlignment="Top" >
                                                    <TextBlock    HorizontalAlignment="Left" VerticalAlignment="Top"   >W</TextBlock>
                                                    <TextBlock HorizontalAlignment="Left" VerticalAlignment="Bottom"   ></TextBlock>
                                                </StackPanel>
                                            </Button>

                                            <Button Style="{StaticResource InformButton}" Command="local:TouchScreenKeyboard.CmdE"  VerticalContentAlignment="Top" HorizontalContentAlignment="Left"  Width="50" Height="50">
                                                <StackPanel Orientation="Vertical" HorizontalAlignment="Left" VerticalAlignment="Top" >
                                                    <TextBlock    HorizontalAlignment="Left" VerticalAlignment="Top"   >E</TextBlock>
                                                    <TextBlock HorizontalAlignment="Left" VerticalAlignment="Bottom"   ></TextBlock>
                                                </StackPanel>
                                            </Button>
                                            <Button Style="{StaticResource InformButton}" Command="local:TouchScreenKeyboard.CmdR"  VerticalContentAlignment="Top" HorizontalContentAlignment="Left"  Width="50" Height="50">
                                                <StackPanel Orientation="Vertical" HorizontalAlignment="Left" VerticalAlignment="Top" >
                                                    <TextBlock    HorizontalAlignment="Left" VerticalAlignment="Top"   >R</TextBlock>
                                                    <TextBlock HorizontalAlignment="Left" VerticalAlignment="Bottom"   ></TextBlock>
                                                </StackPanel>
                                            </Button>
                                            <Button Style="{StaticResource InformButton}" Command="local:TouchScreenKeyboard.CmdT"  VerticalContentAlignment="Top" HorizontalContentAlignment="Left"  Width="50" Height="50">
                                                <StackPanel Orientation="Vertical" HorizontalAlignment="Left" VerticalAlignment="Top" >
                                                    <TextBlock    HorizontalAlignment="Left" VerticalAlignment="Top"   >T</TextBlock>
                                                    <TextBlock HorizontalAlignment="Left" VerticalAlignment="Bottom"   ></TextBlock>
                                                </StackPanel>
                                            </Button>
                                            <Button Style="{StaticResource InformButton}"  Command="local:TouchScreenKeyboard.CmdY"  VerticalContentAlignment="Top" HorizontalContentAlignment="Left"  Width="50" Height="50">
                                                <StackPanel Orientation="Vertical" HorizontalAlignment="Left" VerticalAlignment="Top" >
                                                    <TextBlock    HorizontalAlignment="Left" VerticalAlignment="Top"   >Y</TextBlock>
                                                    <TextBlock HorizontalAlignment="Left" VerticalAlignment="Bottom"   ></TextBlock>
                                                </StackPanel>
                                            </Button>
                                            <Button Style="{StaticResource InformButton}" Command="local:TouchScreenKeyboard.CmdU"   VerticalContentAlignment="Top" HorizontalContentAlignment="Left"  Width="50" Height="50">
                                                <StackPanel Orientation="Vertical" HorizontalAlignment="Left" VerticalAlignment="Top" >
                                                    <TextBlock    HorizontalAlignment="Left" VerticalAlignment="Top"   >U</TextBlock>
                                                    <TextBlock HorizontalAlignment="Left" VerticalAlignment="Bottom"   ></TextBlock>
                                                </StackPanel>
                                            </Button>

                                            <Button Style="{StaticResource InformButton}" Command="local:TouchScreenKeyboard.CmdI"  VerticalContentAlignment="Top" HorizontalContentAlignment="Left"  Width="50" Height="50">
                                                <StackPanel Orientation="Vertical" HorizontalAlignment="Left" VerticalAlignment="Top" >
                                                    <TextBlock    HorizontalAlignment="Left" VerticalAlignment="Top"   >I</TextBlock>
                                                    <TextBlock HorizontalAlignment="Left" VerticalAlignment="Bottom"   ></TextBlock>
                                                </StackPanel>
                                            </Button>

                                            <Button Style="{StaticResource InformButton}" Command="local:TouchScreenKeyboard.CmdO"   VerticalContentAlignment="Top" HorizontalContentAlignment="Left"  Width="50" Height="50">
                                                <StackPanel Orientation="Vertical" HorizontalAlignment="Left" VerticalAlignment="Top" >
                                                    <TextBlock    HorizontalAlignment="Left" VerticalAlignment="Top"   >O</TextBlock>
                                                    <TextBlock HorizontalAlignment="Left" VerticalAlignment="Bottom"   ></TextBlock>
                                                </StackPanel>
                                            </Button>

                                            <Button Style="{StaticResource InformButton}" Command="local:TouchScreenKeyboard.CmdP"   VerticalContentAlignment="Top" HorizontalContentAlignment="Left"  Width="50" Height="50">
                                                <StackPanel Orientation="Vertical" HorizontalAlignment="Left" VerticalAlignment="Top" >
                                                    <TextBlock    HorizontalAlignment="Left" VerticalAlignment="Top"   >P</TextBlock>
                                                    <TextBlock HorizontalAlignment="Left" VerticalAlignment="Bottom"   ></TextBlock>
                                                </StackPanel>
                                            </Button>



                                            <Button Style="{StaticResource InformButton}" Command="local:TouchScreenKeyboard.CmdOpenCrulyBrace"   VerticalContentAlignment="Top" HorizontalContentAlignment="Left"  Width="50" Height="50">
                                                <StackPanel Orientation="Vertical" HorizontalAlignment="Left" VerticalAlignment="Top" >
                                                    <TextBlock    HorizontalAlignment="Left" VerticalAlignment="Top"   >{</TextBlock>
                                                    <TextBlock HorizontalAlignment="Left" VerticalAlignment="Bottom"   >[</TextBlock>
                                                </StackPanel>
                                            </Button>

                                            <Button Style="{StaticResource InformButton}" Command="local:TouchScreenKeyboard.CmdEndCrultBrace"   VerticalContentAlignment="Top" HorizontalContentAlignment="Left"  Width="50" Height="50">
                                                <StackPanel Orientation="Vertical" HorizontalAlignment="Left" VerticalAlignment="Top" >
                                                    <TextBlock    HorizontalAlignment="Left" VerticalAlignment="Top"   >}</TextBlock>
                                                    <TextBlock HorizontalAlignment="Left" VerticalAlignment="Bottom"   >]</TextBlock>
                                                </StackPanel>
                                            </Button>

                                            <Button Style="{StaticResource InformButton}" Command="local:TouchScreenKeyboard.CmdOR"   VerticalContentAlignment="Top" HorizontalContentAlignment="Left"  Width="77.5" Height="50">
                                                <StackPanel Orientation="Vertical" HorizontalAlignment="Left" VerticalAlignment="Top" >
                                                    <TextBlock    HorizontalAlignment="Left" VerticalAlignment="Top"   >|</TextBlock>
                                                    <TextBlock HorizontalAlignment="Left" VerticalAlignment="Bottom"   >\</TextBlock>
                                                </StackPanel>
                                            </Button>



                                        </StackPanel>
                                        <StackPanel Orientation="Horizontal" >

                                            <Button Style="{StaticResource InformButton}" VerticalContentAlignment="Top"  Command="local:TouchScreenKeyboard.CmdCapsLock"  HorizontalContentAlignment="Left"  Width="102.5" Height="50">
                                                <StackPanel Orientation="Vertical" HorizontalAlignment="Left" VerticalAlignment="Top" >
                                                    <!--<TextBlock HorizontalAlignment="Left" VerticalAlignment="Top"   >CapLock</TextBlock>-->
                                                    <TextBlock HorizontalAlignment="Left" VerticalAlignment="Bottom"   ></TextBlock>
                                                </StackPanel>
                                            </Button>



                                            <Button Style="{StaticResource InformButton}" VerticalContentAlignment="Top" Command="local:TouchScreenKeyboard.CmdA"  HorizontalContentAlignment="Left"  Width="50" Height="50">
                                                <StackPanel Orientation="Vertical" HorizontalAlignment="Left" VerticalAlignment="Top" >
                                                    <TextBlock    HorizontalAlignment="Left" VerticalAlignment="Top"   >A</TextBlock>
                                                    <TextBlock HorizontalAlignment="Left" VerticalAlignment="Bottom"   ></TextBlock>
                                                </StackPanel>
                                            </Button>

                                            <Button Style="{StaticResource InformButton}" VerticalContentAlignment="Top" Command="local:TouchScreenKeyboard.CmdS"  HorizontalContentAlignment="Left"  Width="50" Height="50">
                                                <StackPanel Orientation="Vertical" HorizontalAlignment="Left" VerticalAlignment="Top" >
                                                    <TextBlock    HorizontalAlignment="Left" VerticalAlignment="Top"   >S</TextBlock>
                                                    <TextBlock HorizontalAlignment="Left" VerticalAlignment="Bottom"   ></TextBlock>
                                                </StackPanel>
                                            </Button>
                                            <Button Style="{StaticResource InformButton}" VerticalContentAlignment="Top" Command="local:TouchScreenKeyboard.CmdD"  HorizontalContentAlignment="Left"  Width="50" Height="50">
                                                <StackPanel Orientation="Vertical" HorizontalAlignment="Left" VerticalAlignment="Top" >
                                                    <TextBlock    HorizontalAlignment="Left" VerticalAlignment="Top"   >D</TextBlock>
                                                    <TextBlock HorizontalAlignment="Left" VerticalAlignment="Bottom"   ></TextBlock>
                                                </StackPanel>
                                            </Button>
                                            <Button Style="{StaticResource InformButton}" VerticalContentAlignment="Top" Command="local:TouchScreenKeyboard.CmdF"  HorizontalContentAlignment="Left"  Width="50" Height="50">
                                                <StackPanel Orientation="Vertical" HorizontalAlignment="Left" VerticalAlignment="Top" >
                                                    <TextBlock    HorizontalAlignment="Left" VerticalAlignment="Top"   >F</TextBlock>
                                                    <TextBlock HorizontalAlignment="Left" VerticalAlignment="Bottom"   ></TextBlock>
                                                </StackPanel>
                                            </Button>
                                            <Button Style="{StaticResource InformButton}" VerticalContentAlignment="Top" Command="local:TouchScreenKeyboard.CmdG"  HorizontalContentAlignment="Left"  Width="50" Height="50">
                                                <StackPanel Orientation="Vertical" HorizontalAlignment="Left" VerticalAlignment="Top" >
                                                    <TextBlock    HorizontalAlignment="Left" VerticalAlignment="Top"   >G</TextBlock>
                                                    <TextBlock HorizontalAlignment="Left" VerticalAlignment="Bottom"   ></TextBlock>
                                                </StackPanel>
                                            </Button>
                                            <Button Style="{StaticResource InformButton}" VerticalContentAlignment="Top" Command="local:TouchScreenKeyboard.CmdH"  HorizontalContentAlignment="Left"  Width="50" Height="50">
                                                <StackPanel Orientation="Vertical" HorizontalAlignment="Left" VerticalAlignment="Top" >
                                                    <TextBlock    HorizontalAlignment="Left" VerticalAlignment="Top"   >H</TextBlock>
                                                    <TextBlock HorizontalAlignment="Left" VerticalAlignment="Bottom"   ></TextBlock>
                                                </StackPanel>
                                            </Button>

                                            <Button Style="{StaticResource InformButton}" VerticalContentAlignment="Top" Command="local:TouchScreenKeyboard.CmdJ"  HorizontalContentAlignment="Left"  Width="50" Height="50">
                                                <StackPanel Orientation="Vertical" HorizontalAlignment="Left" VerticalAlignment="Top" >
                                                    <TextBlock    HorizontalAlignment="Left" VerticalAlignment="Top"   >J</TextBlock>
                                                    <TextBlock HorizontalAlignment="Left" VerticalAlignment="Bottom"   ></TextBlock>
                                                </StackPanel>
                                            </Button>

                                            <Button Style="{StaticResource InformButton}" VerticalContentAlignment="Top" Command="local:TouchScreenKeyboard.CmdK"  HorizontalContentAlignment="Left"  Width="50" Height="50">
                                                <StackPanel Orientation="Vertical" HorizontalAlignment="Left" VerticalAlignment="Top" >
                                                    <TextBlock    HorizontalAlignment="Left" VerticalAlignment="Top"   >K</TextBlock>
                                                    <TextBlock HorizontalAlignment="Left" VerticalAlignment="Bottom"   ></TextBlock>
                                                </StackPanel>
                                            </Button>

                                            <Button Style="{StaticResource InformButton}" VerticalContentAlignment="Top" Command="local:TouchScreenKeyboard.CmdL"  HorizontalContentAlignment="Left"  Width="50" Height="50">
                                                <StackPanel Orientation="Vertical" HorizontalAlignment="Left" VerticalAlignment="Top" >
                                                    <TextBlock    HorizontalAlignment="Left" VerticalAlignment="Top"   >L</TextBlock>
                                                    <TextBlock HorizontalAlignment="Left" VerticalAlignment="Bottom"   ></TextBlock>
                                                </StackPanel>
                                            </Button>



                                            <Button Style="{StaticResource InformButton}" VerticalContentAlignment="Top" Command="local:TouchScreenKeyboard.CmdColon"   HorizontalContentAlignment="Left"  Width="50" Height="50">
                                                <StackPanel Orientation="Vertical" HorizontalAlignment="Left" VerticalAlignment="Top" >
                                                    <TextBlock    HorizontalAlignment="Left" VerticalAlignment="Top"   >:</TextBlock>
                                                    <TextBlock HorizontalAlignment="Left" VerticalAlignment="Bottom"   >;</TextBlock>
                                                </StackPanel>
                                            </Button>

                                            <Button Style="{StaticResource InformButton}" VerticalContentAlignment="Top" Command="local:TouchScreenKeyboard.CmdDoubleInvertedComma"   HorizontalContentAlignment="Left"  Width="50" Height="50">
                                                <StackPanel Orientation="Vertical" HorizontalAlignment="Left" VerticalAlignment="Top" >
                                                    <TextBlock    HorizontalAlignment="Left" VerticalAlignment="Top"   >"</TextBlock>
                                                    <TextBlock HorizontalAlignment="Left" VerticalAlignment="Bottom"   >'</TextBlock>
                                                </StackPanel>
                                            </Button>

                                            <Button Style="{StaticResource InformButton}" VerticalContentAlignment="Top" Command="local:TouchScreenKeyboard.CmdEnter"  HorizontalContentAlignment="Left"  Width="106.5" Height="50">
                                                <StackPanel Orientation="Vertical" HorizontalAlignment="Left" VerticalAlignment="Top" >
                                                    <TextBlock    HorizontalAlignment="Left" VerticalAlignment="Top"   >Enter</TextBlock>
                                                    <TextBlock HorizontalAlignment="Left" VerticalAlignment="Bottom"   ></TextBlock>
                                                </StackPanel>
                                            </Button>



                                        </StackPanel>
                                        <StackPanel Orientation="Horizontal" >

                                            <Button Style="{StaticResource InformButton}" Command="local:TouchScreenKeyboard.CmdShift"  VerticalContentAlignment="Top" HorizontalContentAlignment="Left"  Width="131.5" Height="50">
                                                <StackPanel Orientation="Vertical" HorizontalAlignment="Left" VerticalAlignment="Top" >
                                                    <TextBlock    HorizontalAlignment="Left" VerticalAlignment="Top"   >Shift</TextBlock>
                                                    <TextBlock HorizontalAlignment="Left" VerticalAlignment="Bottom"   ></TextBlock>
                                                </StackPanel>
                                            </Button>



                                            <Button Style="{StaticResource InformButton}" Command="local:TouchScreenKeyboard.CmdZ"   VerticalContentAlignment="Top" HorizontalContentAlignment="Left"  Width="50" Height="50">
                                                <StackPanel Orientation="Vertical" HorizontalAlignment="Left" VerticalAlignment="Top" >
                                                    <TextBlock    HorizontalAlignment="Left" VerticalAlignment="Top"   >Z</TextBlock>
                                                    <TextBlock HorizontalAlignment="Left" VerticalAlignment="Bottom"   ></TextBlock>
                                                </StackPanel>
                                            </Button>

                                            <Button Style="{StaticResource InformButton}" Command="local:TouchScreenKeyboard.CmdX"  VerticalContentAlignment="Top" HorizontalContentAlignment="Left"  Width="50" Height="50">
                                                <StackPanel Orientation="Vertical" HorizontalAlignment="Left" VerticalAlignment="Top" >
                                                    <TextBlock    HorizontalAlignment="Left" VerticalAlignment="Top"   >X</TextBlock>
                                                    <TextBlock HorizontalAlignment="Left" VerticalAlignment="Bottom"   ></TextBlock>
                                                </StackPanel>
                                            </Button>
                                            <Button Style="{StaticResource InformButton}" Command="local:TouchScreenKeyboard.CmdC"  VerticalContentAlignment="Top" HorizontalContentAlignment="Left"  Width="50" Height="50">
                                                <StackPanel Orientation="Vertical" HorizontalAlignment="Left" VerticalAlignment="Top" >
                                                    <TextBlock    HorizontalAlignment="Left" VerticalAlignment="Top"   >C</TextBlock>
                                                    <TextBlock HorizontalAlignment="Left" VerticalAlignment="Bottom"   ></TextBlock>
                                                </StackPanel>
                                            </Button>
                                            <Button Style="{StaticResource InformButton}" Command="local:TouchScreenKeyboard.CmdV"   VerticalContentAlignment="Top" HorizontalContentAlignment="Left"  Width="50" Height="50">
                                                <StackPanel Orientation="Vertical" HorizontalAlignment="Left" VerticalAlignment="Top" >
                                                    <TextBlock    HorizontalAlignment="Left" VerticalAlignment="Top"   >V</TextBlock>
                                                    <TextBlock HorizontalAlignment="Left" VerticalAlignment="Bottom"   ></TextBlock>
                                                </StackPanel>
                                            </Button>
                                            <Button Style="{StaticResource InformButton}" Command="local:TouchScreenKeyboard.CmdB"   VerticalContentAlignment="Top" HorizontalContentAlignment="Left"  Width="50" Height="50">
                                                <StackPanel Orientation="Vertical" HorizontalAlignment="Left" VerticalAlignment="Top" >
                                                    <TextBlock    HorizontalAlignment="Left" VerticalAlignment="Top"   >B</TextBlock>
                                                    <TextBlock HorizontalAlignment="Left" VerticalAlignment="Bottom"   ></TextBlock>
                                                </StackPanel>
                                            </Button>
                                            <Button Style="{StaticResource InformButton}" Command="local:TouchScreenKeyboard.CmdN"  VerticalContentAlignment="Top" HorizontalContentAlignment="Left"  Width="50" Height="50">
                                                <StackPanel Orientation="Vertical" HorizontalAlignment="Left" VerticalAlignment="Top" >
                                                    <TextBlock    HorizontalAlignment="Left" VerticalAlignment="Top"   >N</TextBlock>
                                                    <TextBlock HorizontalAlignment="Left" VerticalAlignment="Bottom"   ></TextBlock>
                                                </StackPanel>
                                            </Button>

                                            <Button Style="{StaticResource InformButton}" Command="local:TouchScreenKeyboard.CmdM"   VerticalContentAlignment="Top" HorizontalContentAlignment="Left"  Width="50" Height="50">
                                                <StackPanel Orientation="Vertical" HorizontalAlignment="Left" VerticalAlignment="Top" >
                                                    <TextBlock    HorizontalAlignment="Left" VerticalAlignment="Top"   >M</TextBlock>
                                                    <TextBlock HorizontalAlignment="Left" VerticalAlignment="Bottom"   ></TextBlock>
                                                </StackPanel>
                                            </Button>

                                            <Button Style="{StaticResource InformButton}" Command="local:TouchScreenKeyboard.CmdLessThan"  VerticalContentAlignment="Top" HorizontalContentAlignment="Left"  Width="50" Height="50">
                                                <StackPanel Orientation="Vertical" HorizontalAlignment="Left" VerticalAlignment="Top" >
                                                    <TextBlock    HorizontalAlignment="Left" VerticalAlignment="Top"   ><</TextBlock>
                                                    <TextBlock HorizontalAlignment="Left" VerticalAlignment="Bottom"   >,</TextBlock>
                                                </StackPanel>
                                            </Button>

                                            <Button Style="{StaticResource InformButton}" Command="local:TouchScreenKeyboard.CmdGreaterThan" VerticalContentAlignment="Top" HorizontalContentAlignment="Left"  Width="50" Height="50">
                                                <StackPanel Orientation="Vertical" HorizontalAlignment="Left" VerticalAlignment="Top" >
                                                    <TextBlock    HorizontalAlignment="Left" VerticalAlignment="Top"   >></TextBlock>
                                                    <TextBlock HorizontalAlignment="Left" VerticalAlignment="Bottom"   >.</TextBlock>
                                                </StackPanel>
                                            </Button>



                                            <Button Style="{StaticResource InformButton}" Command="local:TouchScreenKeyboard.CmdQuestion" VerticalContentAlignment="Top" HorizontalContentAlignment="Left"  Width="50" Height="50">
                                                <StackPanel Orientation="Vertical" HorizontalAlignment="Left" VerticalAlignment="Top" >
                                                    <TextBlock    HorizontalAlignment="Left" VerticalAlignment="Top"   >?</TextBlock>
                                                    <TextBlock HorizontalAlignment="Left" VerticalAlignment="Bottom"   >/</TextBlock>
                                                </StackPanel>
                                            </Button>



                                            <Button Style="{StaticResource InformButton}" Command="local:TouchScreenKeyboard.CmdShift"  VerticalContentAlignment="Top" HorizontalContentAlignment="Left"  Width="131.5" Height="50" Visibility="Hidden">
                                                <StackPanel Orientation="Vertical" HorizontalAlignment="Left" VerticalAlignment="Top" >
                                                    <TextBlock    HorizontalAlignment="Left" VerticalAlignment="Top"   >Shift</TextBlock>
                                                    <TextBlock HorizontalAlignment="Left" VerticalAlignment="Bottom"   ></TextBlock>
                                                </StackPanel>
                                            </Button>



                                        </StackPanel>
                                        <StackPanel Orientation="Horizontal" >

                                            <Button Style="{StaticResource InformButton}" Command="local:TouchScreenKeyboard.CmdClear" VerticalContentAlignment="Top" HorizontalContentAlignment="Left"  Width="201" Height="50">
                                                Clear
                                            </Button>

                                            <Button Style="{StaticResource InformButton}" Command="local:TouchScreenKeyboard.CmdSpaceBar" VerticalContentAlignment="Top" HorizontalContentAlignment="Left"  Width="395" Height="50">
                                                <StackPanel Orientation="Vertical" HorizontalAlignment="Left" VerticalAlignment="Top" >
                                                    <TextBlock    HorizontalAlignment="Left" VerticalAlignment="Top"   ></TextBlock>
                                                    <TextBlock HorizontalAlignment="Left" VerticalAlignment="Bottom"   ></TextBlock>
                                                </StackPanel>
                                            </Button>

                                            <Button Style="{StaticResource InformButton}" Command="local:TouchScreenKeyboard.CmdClear" VerticalContentAlignment="Top" HorizontalContentAlignment="Left"  Width="201" Height="50">
                                                Clear
                                            </Button>


                                        </StackPanel>

                                    </StackPanel>
                                </Border>

                            </Border>
                        </Border>

                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</ResourceDictionary>








 


 

最后是使用方法

<TextBox k:TouchScreenKeyboard.TouchScreenKeyboard="true" Margin="208,36,178,36" Grid.Row="1" Text="" TextWrapping="Wrap" FontSize="15" x:Name="txtKeyword" TextChanged="txtKeyword_TextChanged" BorderThickness="0"  Panel.ZIndex="2">

 

 

 

效果图WPF 悬浮键盘