Событие WPF с измененным текстом не запускается на 'S' - PullRequest
0 голосов
/ 11 июня 2018

У меня есть приложение WPF, которое является пользовательским элементом управления, размещенным в приложении другой компании.

Созданные мною текстовые поля будут принимать все символы и цифры, кроме заглавной 'S'.Это MVVM, связанные со строковыми свойствами, которые работают с любым другим символом, кроме 'S'.Текст измененных событий запускается и для каждого другого персонажа.Клавиши «Вниз» и «Вверх» сработают для символа «S».Текстовое поле не отображает символ.

Я где-то читал, что иногда возникает конфликт с размещенными пользовательскими элементами управления, в которых он не будет принимать определенные входные данные, но я не могу установить свойство ElementHost, необходимое для решения этого какВ этом случае у меня нет программного доступа к окну хоста.Элемент управления размещен в другом пользовательском элементе управления, размещенном в стороннем приложении. Я также добавляю приложение.

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

Ответы [ 3 ]

0 голосов
/ 12 июня 2018

Я подозреваю, что вы подписались на событие TextChanged .Если это так, просто подпишитесь на PreviewKeyDown , примените свой фильтр и установите e.Handled на true, чтобы уменьшить его.

private void PreviewKeyDownFilter(object sender, KeyEventArgs e)
{
    if (e.Key == Key.S && Keyboard.IsKeyDown(Key.LeftShift))
        e.Handled = true;
}
0 голосов
/ 12 июня 2018

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

 private void IOTextBox_PreviewKeyDown(object sender, KeyEventArgs e)
    {
        if (e.Key == Key.S && (Keyboard.IsKeyDown(Key.LeftShift) || Keyboard.IsKeyDown(Key.RightShift)))
        {
            TextBox tb = sender as TextBox;
            tb.Text = tb.Text + "S";
            tb.CaretIndex = tb.Text.Length;
            e.Handled = true;
        }

    }

Если у кого-то есть идеи получше ...

0 голосов
/ 11 июня 2018

Попробуйте создать отдельное приложение WPF, которое выполняет то же самое: фиктивное приложение, в котором размещается фиктивный элемент управления, в котором размещается ваш элемент управления.Если все работает хорошо, есть вероятность того, что в их приложении есть ярлык на ускорение или логика другого типа, которая использует этот символ "S".

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