用户控制的FocusLost [wpf]

ica*_*tan 5 c# wpf events user-controls focus

FocusLost事件正在正确处理WPF的组件对于用户控件它是不同的:

如果单击或聚焦用户控件中的任何控件,则会立即触发User-Control的FocusLost!我怎么能阻止它呢?

我无法解决这个问题:(

Fre*_*lad 11

您可以检查IsKeyboardFocusWithin的UserControl,以确定是否UserControl或任何其子女有键盘焦点与否.还有一个事件IsKeyboardFocusWithinChanged,您可以使用,只是检查,如果e.OldValue是true和e.NewValue是false在事件处理程序.

编辑.
下面是一个示例,说明如何在转为false 时将UserControl加注设置为路由事件(UserControlLostFocus)IsKeyboardFocusWithin.

可用的像

<my:UserControl1 UserControlLostFocus="userControl11_UserControlLostFocus"
                 ../>
Run Code Online (Sandbox Code Playgroud)

样品 UserControl

public partial class UserControl1 : UserControl
{
    public static readonly RoutedEvent UserControlLostFocusEvent =
        EventManager.RegisterRoutedEvent("UserControlLostFocus",
                                         RoutingStrategy.Bubble,
                                         typeof(RoutedEventHandler),
                                         typeof(UserControl1));
    public event RoutedEventHandler UserControlLostFocus
    {
        add { AddHandler(UserControlLostFocusEvent, value); }
        remove { RemoveHandler(UserControlLostFocusEvent, value); }
    }

    public UserControl1()
    {
        InitializeComponent();
        this.IsKeyboardFocusWithinChanged += UserControl1_IsKeyboardFocusWithinChanged;
    }

    void UserControl1_IsKeyboardFocusWithinChanged(object sender, DependencyPropertyChangedEventArgs e)
    {
        if ((bool)e.OldValue == true && (bool)e.NewValue == false)
        {
            RaiseEvent(new RoutedEventArgs(UserControl1.UserControlLostFocusEvent, this));
        }
    }
}
Run Code Online (Sandbox Code Playgroud)