Я работаю над устаревшим кодом 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)