Получить элемент, который украл фокус, прежде чем это происходит в WPF - PullRequest
2 голосов
/ 01 октября 2010

Чтобы быть понятнее.Мне нужно знать, какой элемент украл фокус в событии сфокусированного элемента LostFocus.Примерно так:

  • У меня 3 кнопки: A, B и C
  • «Кнопка A» имеет фокус
  • «Кнопка C» нажата
  • «Кнопка A» запускается событие LostFocus
  • Там я хочу знать, что «Кнопка C» украла фокус (Возможно, это также «Кнопка B»)

Дайте мне знать, если есть способ сделать это.

Спасибо!

1 Ответ

4 голосов
/ 01 октября 2010

Вы всегда можете проверить 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());
}
...