Я использую следующий метод для отклонения SIP:
///
/// Dismisses the SIP by focusing on an ancestor of the current element that isn't a
/// TextBox or PasswordBox.
///
public static void DismissSip()
{
var focused = FocusManager.GetFocusedElement() as DependencyObject;
if ((null != focused) && ((focused is TextBox) || (focused is PasswordBox)))
{
// Find the next focusable element that isn't a TextBox or PasswordBox
// and focus it to dismiss the SIP.
var focusable = (Control)(from d in focused.Ancestors()
where
!(d is TextBox) &&
!(d is PasswordBox) &&
d is Control
select d).FirstOrDefault();
if (null != focusable)
{
focusable.Focus();
}
}
}
Метод Ancestors
происходит от LinqToVisualTree Колина Эберхардта.Код используется вместе с обработчиком ключа Enter для «перехода» на следующий TextBox или PasswordBox, поэтому они пропускаются в выделении, но вы можете включить их, если это имеет смысл для вас.