У меня есть проект, нацеленный на .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);
}
}
Заранее большое спасибо!