C#在不使用控制事件的情况下失去焦点

本文关键字:情况下 失去 焦点 事件 控制 | 更新日期: 2023-09-27 17:57:40

有一种方法可以在不使用每个组件的LostFocus事件的情况下,找出c#表单中谁失去了焦点?

[编辑]

我需要一个屏幕键盘。

我需要存储最后一次集中控制来启动按键,但我需要对窗口中的所有内容进行操作。

此外,主要项目是wpf,我有一些组件嵌套为itemsTemplate等等…

C#在不使用控制事件的情况下失去焦点

我最终使用了这个:

    foreach (Control uie in FindInLogicalTreeDown(this, typeof(TextBox))) AssignEvents(uie);
    private static IEnumerable<DependencyObject> FindInLogicalTreeDown(DependencyObject obj, Type type)
    {
        if (obj != null)
        {
            if (obj.GetType() == type) { yield return obj; }
            foreach (object child in LogicalTreeHelper.GetChildren(obj)) 
                if (typeof(DependencyObject).IsAssignableFrom(child.GetType()))
                    foreach (var nobj in FindInLogicalTreeDown((DependencyObject)child, type)) yield return nobj;
        }
        yield break;
    }
    void AssignEvents(Control element)
    {
        element.GotMouseCapture += new MouseEventHandler(Component_GotFocus);
    }
    public Control LastFocus { get; set; }
    public void Component_GotFocus(object sender, RoutedEventArgs e)
    {
        LastFocus = (Control)sender;
        if (LastFocus.GetType() == typeof(TextBox)) { KeyboardVisible = true; }
    }

我认为没有任何方法,除非您订阅事件并跟踪哪个失焦事件触发了最后一个