Я работаю над приложением Xamarin.Forms для склада, мы используем Zebra TC25 , который имеет встроенный сканер штрих-кода. Сканер работает нормально и выдает коды.
У меня есть сетка, как показано ниже, и я хочу переместить фокус на следующее текстовое поле (Ввод) после сканирования. Теперь у меня есть метод обратного вызова, который запускается после сканирования.
Мой вопрос: Как мне изящно узнать, какой элемент находится в фокусе, а какой должен быть следующим?
Я пытался использовать TabIndex
- он был проигнорирован.
Я попытался дать им имена, как показано ниже, а затем использовать словарь, который отображает каждый элемент Entry на следующий, который необходимо сфокусировать. Там мне пришлось перебирать ключи, а затем вызывать что-то вроде _focusOrder[entry].Focus();
, что тоже не самое симпатичное решение. Особенно с учетом того, что будет несколько форм с более чем 3 кодами для сканирования.
Примечание : Сканер реализован в виде клавиатуры, и мне не нужно устанавливать значение со сканера в моем обратном вызове - он просто работает «из коробки». Поэтому я не слежу за сфокусированным элементом, так как он не нужен (для ввода).
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Label Grid.Row="0" Grid.Column="0" Text="Von" />
<Entry Grid.Row="0" Grid.Column="1" Text="{Binding Path=VonLagerplatz}" x:Name="_vonEntry" />
<Label Grid.Row="1" Grid.Column="0" Text="Nach" />
<Entry Grid.Row="1" Grid.Column="1" Text="{Binding Path=NachLagerplatz}" x:Name="_nachEntry" />
<Label Grid.Row="2" Grid.Column="0" Text="Artikel" />
<Entry Grid.Row="2" Grid.Column="1" Text="{Binding Path=Artikel}" x:Name="_artikelEntry" />
</Grid>
Оптимальные решения: (которые я не смог заставить работать, потому что это мое первое приложение Xamarin)
заставить TabIndex
-свойство работать.
Используйте прикрепленное свойство, где я могу ссылаться на следующий элемент в XAML. Так что есть что-то вроде <Entry .... x:Name="_vonEntry" NextElement="{Reference _nachEntry}" />