Получить элемент, который украл фокус, прежде чем это происходит в WPF
Чтобы быть понятнее. Мне нужно знать, какой элемент украл фокус в событии сфокусированного элемента LostFocus. Что-то вроде этого:
- У меня есть 3 кнопки: A, B и C
- "Кнопка А" имеет фокус
- "Кнопка C" нажата
- Событие LostFocus "Кнопка A" вызвано
- Там я хочу знать, что "Кнопка C" украла фокус (Возможно, это также "Кнопка B")
Дайте мне знать, если есть способ сделать это.
Спасибо!
1 ответ
Вы всегда можете проверить FocusManager.GetFocusedElement(dObj), чтобы получить сфокусированный элемент в данном DependencyObject. Итак, в вашем сценарии выше это будет примерно так:
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<Style TargetType="Button">
<EventSetter Event="LostFocus" Handler="OnLostFocus"/>
</Style>
</Window.Resources>
<StackPanel>
<Button>Button1</Button>
<Button>Button2</Button>
<Button>Button3</Button>
</StackPanel>
</Window>
Обработчик события:
private void OnLostFocus(object sender, RoutedEventArgs e)
{
object focusedElement = FocusManager.GetFocusedElement(this);
if (focusedElement is Button)
Console.WriteLine(((Button)focusedElement).Content.ToString());
}