Получить элемент, который украл фокус, прежде чем это происходит в 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());
}
Другие вопросы по тегам