Панель ввода планшетного ПК не вызывает событие TextInput? - PullRequest
6 голосов
/ 19 ноября 2010

У меня есть пользовательский элемент управления, который использует события WPF TextInput.Это отлично работает при использовании клавиатуры;однако, если используется распознавание рукописного ввода «Панель ввода планшетного ПК» (поставляется с Windows 7), при нажатии кнопки «Вставить» событие TextInput не происходит.:

<Window x:Class="TestProject.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Height="300" Width="300"
>
    <local:Text xmlns:local="clr-namespace:TestProject">
        <Control.Template>
            <ControlTemplate TargetType="local:Text">
                <Border Background="Beige">
                    <Viewbox>
                        <TextBlock Text="{TemplateBinding EnteredText}"/>
                    </Viewbox>
                </Border>
            </ControlTemplate>
        </Control.Template>
    </local:Text>
</Window>

Когда приложение запущено, в строке заголовка появляется текстовый ввод.Это работает как с клавиатурой, так и с распознаванием рукописного ввода.Как только вы щелкнете в окне, чтобы сфокусировать элемент управления, для ввода будет работать только клавиатура;распознавание рукописного текста игнорируется.

Кто-нибудь знает, что идет не так?Почему я получаю событие TextInput в одном случае, а не в другом?Это ошибка в WPF?Есть ли работа вокруг?

Ответы [ 2 ]

1 голос
/ 04 декабря 2010

Из того, что я могу сказать, когда вы нажимаете на окно, текстовый объект теряет фокус и, следовательно, не будет захватывать события.

protected override void OnMouseDown(MouseButtonEventArgs e)
{
    base.OnMouseDown(e);
    Focus();
}

Кажется, причина, по которой это не работает, заключается в том, чтотребуется щелкнуть текстовый объект, чтобы сфокусировать текстовый класс

. Я бы предложил:

  1. Добавить обработчик событий для mousedown окна, чтобы сфокусировать текстовый элемент
  2. Фокус текстового объекта при вводе в окне
  3. Запись как текстового объекта, так и заголовка окна при вводе ключей в окне
1 голос
/ 21 ноября 2010

Элемент управления теряет свойства своего фокуса после вставки и не возвращает их, если вы вызываете Focus () для события MouseDown (потому что на самом деле он фокусируется и событие OnFocus больше не сбрасывается).

Если вы сфокусируете другой элемент управления и снова сфокусируете пользовательский элемент управления на его фокусировке, и произойдет событие TextInput (пока вы снова не вставите текст с ввода планшетного ПК).

Я не могу объяснить, что происходит, я думаю, что это может быть ошибкой WPF, но, возможно, эта информация поможет обойти ...

...