Ну, кажется, это довольно просто ..
<StackPanel>
<Controls:SearchTextBox x:Name="searchBox" SearchMode="Instant"
PreviewKeyDown="onSearchBoxPreviewKeyDown"
KeyDown="onKeyDown"
Search="onSearch" Margin="5" />
<Popup Name="popup" >
<ListBox x:Name="itemList"
SelectionMode="Extended"
KeyDown="onItemListKeyDown"
PreviewKeyDown="onPreviewItemListKeyDown"
/>
</Popup>
</StackPanel>
В onPreviewItemListKeyDown выполните следующее
private void onPreviewItemListKeyDown( object sender, KeyEventArgs e )
{
switch (e.Key)
{
case Key.Down:
case Key.Up:
case Key.Enter:
case Key.Escape:
case Key.Space:
{
// swallow
break;
}
default:
{
searchBox.Focus();
return;
}
}
}
Для любой клавиши, которую вы не хотите обрабатывать во всплывающем элементе управления, просто установите фокус на исходный элемент управления. Поскольку мы делаем это в событии предварительного просмотра ключа, ключ, даже ниже, доставляется в мой элемент управления окна поиска.
Это не 'чувствует' правильно ... но это работает для меня.