• Wpf虚拟屏幕键盘


    在Wpf使用虚拟键盘有基于osk和tabtip,后者只能在win8和win10之后电脑使用,而且两者在wpf中调用时都必须提升为管理员权限,实际应用中还是不方便。

    今天介绍的方法是使用第三方库osklib,可以在win10 中不需要管理员权限使用屏幕键盘,该库支持.net framework4以上版本,.netcore3.1以及.net5以上版本,兼容wpf和winform,使用起来也很方便。

    首先使用vs创建一个wpf项目(这里我用的是.net5),为项目添加osklib依赖

    打开包管理器,搜索 Osklib.Wpf或者在命令行输入命令安装依赖

    dotnet add package Osklib.Wpf
    打开MainWindow.xaml,添加一个Textbox控件,同时为Textbox添加GetFocus事件处理方法

    MainWindow.xaml

    <Window ...>
    <Grid>
    <TextBox Width="120" Margin="297,125,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" Text=""
    TextWrapping="Wrap" GotFocus="TextBox_GotFocus"/>

    </Grid>
    </Window>
    MainWindow.xaml.cs

    using System;
    using System.Windows;

    namespace WpfApp1
    {
    public partial class MainWindow : Window
    {
    public MainWindow()
    {
    InitializeComponent();
    }

    private void TextBox_GotFocus(object sender, RoutedEventArgs e)
    {
    try
    {
    Osklib.OnScreenKeyboard.Show();
    }
    catch (Exception ex)
    {
    MessageBox.Show(ex.Message);
    }
    }
    }
    }
    编译运行,点击文本框输入,弹出屏幕键盘效果如下:

    官方示例中的OnScreenKeyboardSettings.EnableForTextBoxes = true测试中没有效果,可能是操作系统版本问题,直接调用Osklib.OnScreenKeyboard.Show();是没有问题

    这个是触发单个Textbox控件的GotFocus来弹出屏幕按键,如果要全局控制所有Textbox输入来弹框,方法有很多,这里介绍最简单方法,因为GotFocus是路由事件,只要监听MainWindow的GotFocus事件,就可以监听到所有Textbox的GotFocus事件,但需要在事件里加上判断语句如下

    private void Window_GotFocus(object sender, RoutedEventArgs e)
    {
    // 不是Textbox不弹出屏幕键盘
    if (!(e.OriginalSource is TextBox))
    return;
    try
    {
    Osklib.OnScreenKeyboard.Show();
    }
    catch (Exception ex)
    {
    MessageBox.Show(ex.Message);
    }
    }
    如图,只有Textbox1和Textbox2能触发屏幕键盘,而PasswordBox不会触发屏幕键盘

    对于非路由事件,不能用这种方法

    最后附上osklib库地址:https://github.com/AlexeiScherbakov/osklib


    ————————————————
    版权声明:本文为CSDN博主「沝林」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/duanzilin/article/details/121873637

  • 相关阅读:
    【html5构建触屏网站】之touch事件
    优化网站加载速度的14个技巧
    存储
    [概念] javascript构造函数和普通函数的
    nodejs中的 Cannot read property'text' of undefined 问题
    整理js继承
    清除浮动的五种方法
    用canvas绘制一个时钟
    javascript运动框架
    $(document).ready()与window.onload的区别(转发)
  • 原文地址:https://www.cnblogs.com/webenh/p/16168800.html
Copyright © 2020-2023  润新知