好的,我有一个问题,我一直在尝试在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。
答案 0 :(得分:-1)
我发现以下链接可以解决我的问题。
在我的情况下,解决方案是找到控件的祖先(上升到窗口)并订阅事件处理程序,以便在窗口/祖先上注册单击时关闭菜单。完美的工作。