在PasswordBox上的鼠标左键按下时在屏幕上显示键盘,在框外单击时应隐藏

时间:2019-05-02 19:31:51

标签: c# wpf

平台:C#WPF

环境:Visual Studio 2013

问题1 :我想在C#WPF的PasswordBox控件上的鼠标左键按下时在屏幕键盘上显示第三方。我使用了以下代码:

private void PasswordBox_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    System.Diagnostics.Process.Start("D:\\CCOnScreenKeyboard.exe"); 
}

但是它不能在屏幕键盘上启动。而是在MouseDoubleClickGotFocus事件上触发。

问题2

我想在PasswordBox之外单击鼠标时在屏幕键盘上隐藏,然后在框内的鼠标左键下方再次显示。

第3个问题

我要在单击时显示键盘,而不是鼠标双击

2 个答案:

答案 0 :(得分:0)

我相信最好的方法是使用Focus事件,因为您只想在与PasswordBox进行交互时使用键盘,并且一旦有停止互动。

private void PasswordBox_GotFocus(object sender, RoutedEventArgs e) => 
    Process.Start("D:\\CCOnScreenKeyboard.exe");

private void PasswordBox_LostFocus(object sender, RoutedEventArgs e)
{
    foreach (var process in Process.GetProcessesByName("CCOnScreenKeyboard"))
        process.Kill();
}

答案 1 :(得分:0)

您可以处理父窗口的PreviewMouseLeftButtonDown事件。像这样:

bool isVisible = false;
PreviewMouseLeftButtonDown += (ss, ee) => 
{
    if (!passwordBox.IsMouseOver && isVisible)
    {
        System.Diagnostics.Process.GetProcessesByName("CCOnScreenKeyboard")?.FirstOrDefault()?.Kill();
    }
    else if (!isVisible)
    {
        System.Diagnostics.Process.Start("D:\\CCOnScreenKeyboard.exe");
        isVisible = true;

    }
};