Китайский ввод текста в текстовом поле wpf еще до события OnPreviewKeyDown - PullRequest
1 голос
/ 01 февраля 2020

Я работаю над устаревшим кодом wpf и обнаружил странную проблему. Мы используем пользовательский элемент управления TimePicker наследуется от Textbox. Мы использовали свойство зависимости для проверки времени и маски со значением по умолчанию, таким как _ : _. Он отлично работает с английскими sh цифрами / шрифтами, но если я изменю язык ввода на Китайский windows 10 ), то он будет вести себя по-другому.

class TimePicker : TextBox 

    static TimePicker()
    {
        // to receive coercion callback when Text property got changed
        InputMaskProperty = DependencyProperty.Register("InputMask",
           typeof(string), typeof(TimePicker),
           new FrameworkPropertyMetadata(InputMask_Changed,
           new CoerceValueCallback(OnCoerceValueChange)));
    }

Ожидаемое поведение в целом, когда пользователь нажимает на клавиатуру, возникает событие ниже:

protected override void OnPreviewTextInput(TextCompositionEventArgs e)

И только здесь я устанавливаю какое-то значение, например this.Text = "some value "в событии выше, чем при вызове события ниже, которое на самом деле является CoerceValueCallback:

  private static object OnCoerceValueChange(DependencyObject obj, object value)

Все нормально, если я использую шрифт Engli sh, он вызывается вышеупомянутым способом, но если я изменяю language / Input Язык в windows 10 для китайского языка упрощен, чем непосредственно установка значения this.Text и затем вызов OnPreviewKeyDown, OnPreviewTextInput. Любое предложение, пожалуйста, как сделать логи c независимыми от специфики культуры c.

Код Xaml выглядит так:

           <External:TimePicker x:Name="StartTimePicker" InputMask="ii:ii" Grid.Row="1" Grid.Column="7" HorizontalAlignment="Left" 
                    Validation.Error="StartTimePickerError" Text="{Binding Path=StartTime, ValidatesOnDataErrors=True, 
                    UpdateSourceTrigger=PropertyChanged, NotifyOnValidationError=True}" Width="50"
                    ToolTip="{Binding RelativeSource ={RelativeSource Self},Path=(Validation.Errors)[0].ErrorContent}">
            </External:TimePicker>

Также выдает System.ExecutionEngineException если встречается e.Key при событии OnPreviewKeyDown (KeyEventArgs e)

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