Еще один способ, который работал для меня, это использование
Mouse.AddPreviewMouseDownOutsideCapturedElementHandler
Например, скажем, у вас есть TextBlock, который при нажатии должен стать редактируемым, показывая сфокусированный TextBox. Затем, когда пользователь щелкнул за пределами TextBox, он должен быть снова скрыт. Вот как вы можете это сделать:
private void YourTextBlock_OnMouseDown(object sender, MouseButtonEventArgs e)
{
YourTextBox.Visibility = Visibility.Visible;
YourTextBox.Focus();
CaptureMouse();
Mouse.AddPreviewMouseDownOutsideCapturedElementHandler(this, OnMouseDownOutsideElement);
}
private void OnMouseDownOutsideElement(object sender, MouseButtonEventArgs e)
{
Mouse.RemovePreviewMouseDownOutsideCapturedElementHandler(this, OnMouseDownOutsideElement);
ReleaseMouseCapture();
YourTextBox.Visibility = Visibility.Hidden;
}