C#Lost Focus不使用控件事件

时间:2011-05-26 11:08:23

标签: c# wpf lostfocus

有一种方法可以让你在c#表单中失去焦点而不使用每个组件的LostFocus事件?

[编辑]

我需要一个屏幕键盘。

我需要将最后一个聚焦控件存储到fire keypress,但我需要在窗口中对所有人进行操作。

主要项目也是wpf,比我有一些嵌套为itemsTemplate的组件等等......

2 个答案:

答案 0 :(得分:1)

我终于使用了这个:

    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; }
    }

答案 1 :(得分:0)

我认为除非你订阅事件并跟踪哪个丢失的焦点事件最后被触发,否则我认为没有任何办法