Моя первоначальная проблема заключается в возможности отличить обычную клавиатуру от сканера штрих-кода:
таймер, проверяющий, слишком ли это быстро, это должен быть сканер штрих-кода,
Я пытался с помощью триггера событий, но я не мог найти способ, поэтому я в конечном итоге с некоторым кодом позади, я также должен убедиться, что фокус на правильный элемент управления
код конца
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();
}