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

#c# #wpf #mvvm

#c# #wpf #mvvm

Вопрос:

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

внутренний код

  private void UiTextBox_TextChanged(object sender, System.Windows.Controls.TextChangedEventArgs e)
        {
            var window = Window.GetWindow(this);
            window.KeyDown  = HandleKeyPress;
        }
        private void Windows_Loaded(object sender, RoutedEventArgs e)
        {

            var window = Window.GetWindow(this);
            NewPrelevementLigne.Focus();
            window.KeyDown  = HandleKeyPress;


        }



        private void HandleKeyPress(object sender, KeyEventArgs e)
        {
            var cle = e.Key;
            var vm = (NewPrelevementVm)this.DataContext;
            vm.LigneAddCommand.Execute(null);
        }
  

мой xaml

  <wpf:UiTextBlock    Grid.Row="0" Name="NewPrelevementLigne"   Grid.Column="0"  Text="{Binding Texts.NewPrelevementLigne,UpdateSourceTrigger=PropertyChanged}" FontWeight="SemiBold">

                </wpf:UiTextBlock>
  

моя команда

     private RelayCommand _ligneAddCommand;

    public RelayCommand LigneAddCommand => _ligneAddCommand = _ligneAddCommand ?? new RelayCommand(LigneAddKeyDownEventHandle, LignaAddCanBeExecuted);

    protected virtual bool LignaAddCanBeExecuted() => true;

    protected virtual void LigneAddKeyDownEventHandle()
    {
        if (timer != null)
            timer.Stop();

        timer = new System.Windows.Threading.DispatcherTimer();
        timer.Tick  = (s, args) =>
        {
            var t = s.ToString();
            timer.Stop();
        };
        timer.Interval = TimeSpan.FromMilliseconds(50);
        timer.Start();
    }
  

Комментарии:

1. Чего вы хотите достичь, выделяя это?

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

3. Я предполагаю, что вы не можете использовать Com Reader, но должен быть Reader, имитирующий клавиатуру. Можете ли вы запрограммировать программу чтения так, чтобы она выдавала определенный префикс или суффикс?

4. нет, я не могу, потому что устройство может использоваться другим отделом

5. Разве большинство сканеров штрих-кодов не добавляют символ в начало или конец (или в оба) выходных данных? Проверьте документацию для вашего сканера. Возможно, его можно настроить таким образом.