0

好的,所以我有一个问题,我一直在尝试在 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 中不可用......

使用银光 5.0。

4

1 回答 1

-1

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

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

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

于 2013-11-21T09:47:31.763 回答