Просто добавьте событие KeyDown к элементам (возможно, легче сказать, чем сделать) и выберите элемент, если Key - Tab, событие будет запущено на том, который сфокусирован (имеет рамку вокруг него), например,
<ComboBox Loaded="ComboBox_Loaded">
<ComboBoxItem>1</ComboBoxItem>
<ComboBoxItem>2</ComboBoxItem>
<ComboBoxItem>3</ComboBoxItem>
<ComboBoxItem>4</ComboBoxItem>
<ComboBoxItem>5</ComboBoxItem>
</ComboBox>
private void ComboBoxItem_KeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Tab)
{
var cbi = sender as ComboBoxItem;
var cb = cbi.Parent as ComboBox;
cb.SelectedItem = cbi;
e.Handled = true;
cb.IsDropDownOpen = false;
}
}
private void ComboBox_Loaded(object sender, RoutedEventArgs e)
{
var cb = sender as ComboBox;
foreach (var item in cb.Items)
{
(item as ComboBoxItem).KeyDown += ComboBoxItem_KeyDown;
}
}
В WPF я знал бы о некоторых более чистых способах прикрепления событий, может быть, вы могли бы что-то придумать.