Производный TextBox, который активирует сенсорную клавиатуру - PullRequest
0 голосов
/ 27 сентября 2019

У меня есть проект, нацеленный на .NET Framework 4, и я пытаюсь заставить сенсорную клавиатуру открываться, когда TextBox получает фокус.Я искал решения и обнаружил, что в Framework 4.6.2 и более поздних версиях это делается автоматически, но, к сожалению, я не могу настроить таргетинг на 4.6.2.

Я нашел решение (из этого урока ), который использует класс, который наследуется от TextBox.Дело в том, что я еще не привык к WPF, и я просто создал производный класс и попытался использовать его непосредственно в своем XAML.И, конечно, это не сработало.Он дал мне сообщение об ошибке, сказав, что не может найти файл XAML этого класса.

Итак, я попытался создать пользовательский элемент управления и добавить код C # в его программный код.В файле XAML я только добавил элемент управления TextBox, чтобы я мог связать с ним EventHandlers (события GetFocus и LostFocus).Я использовал свойство x: Name, чтобы найти TextBox, но он дал мне NullException, поскольку TextBox не может быть найден.

Я действительно потерян здесь, так как я не знаю, какой подходЯ должен взять и как заставить это работать.

Это пользовательский элемент управления, который я создал:

XAML

<UserControl x:Class="SistemaFichajeWPF.TouchEnabledTextBoxWPF"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:local="clr-namespace:SistemaFichajeWPF"
             mc:Ignorable="d" 
             Height="35" Width="170">
    <TextBox x:Name="tbPrincipal" FontSize="24"/>
</UserControl>

CS

public partial class TouchEnabledTextBoxWPF : UserControl
    {
        private Process _touchKeyboardProcess = null;
        private TextBox textBox;

        public TouchEnabledTextBoxWPF()
        {
            textBox = this.GetChildOfType<TextBox>();

            textBox.GotTouchCapture += TouchEnabledTextBox_GotTouchCapture;

            textBox.LostFocus += TouchEnabledTextBox_LostFocus;
        }

        private void TouchEnabledTextBox_LostFocus(object sender, System.Windows.RoutedEventArgs e)
        {
            if (_touchKeyboardProcess != null)
            {
                _touchKeyboardProcess.Kill();
                _touchKeyboardProcess = null;
            }
        }

        private void TouchEnabledTextBox_GotTouchCapture(object sender, System.Windows.Input.TouchEventArgs e)
        {
            string touchKeyBoardPath =
                @"C:\Program Files\Common Files\Microsoft Shared\Ink\TabTip.exe";
            _touchKeyboardProcess = Process.Start(touchKeyBoardPath);
        }
    }

Заранее большое спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...