当孩子获得焦点时,防止控制失去焦点

时间:2013-11-13 14:37:31

标签: wpf silverlight focus controls

好的,我有一个问题,我一直在尝试在Silverlight中创建自定义控件。它只是一个按钮,按下后会打开一个下拉菜单,但是下拉菜单是一个子控件。我有一个属性(isDropDownOpen)来控制下拉列表是否打开。我希望当控件失去焦点时,属性变为false,因此在我的类中实现了以下覆盖。

protected override void OnLostFocus(System.Windows.RoutedEventArgs e)
    {
        base.OnLostFocus(e);

        Object focusedElement = FocusManager.GetFocusedElement();
        FrameworkElement element = focusedElement as FrameworkElement;

        if (element != null)
        {
            IsDropDownOpen = false;
        }
    }

问题是,当子控件获得焦点时,控件会失去焦点,因此只要单击按钮以外的任何其他内容,菜单就会关闭。我真的不知道如何解决这个问题,任何想法?

编辑:基本上我想要做的是在实际更改属性之前检查项目是否是孩子。在wpf中,我会使用'IsChild()'或'.containsFocus()'做一些事情,但这些似乎在Silverlight中不可用......

使用silverlight 5.0。

1 个答案:

答案 0 :(得分:-1)

我发现以下链接可以解决我的问题。

http://icircusmonkey.wordpress.com/2012/08/26/silverlight-how-to-close-the-popup-when-user-clicks-outside-of-the-control/

在我的情况下,解决方案是找到控件的祖先(上升到窗口)并订阅事件处理程序,以便在窗口/祖先上注册单击时关闭菜单。完美的工作。