Silverlight 按钮单击事件丢失

Silverlight 按钮单击事件丢失,silverlight,events,button,click,Silverlight,Events,Button,Click,我在Silverlight中有一个菜单和子菜单结构,我希望当父菜单项失去焦点时子菜单消失-标准菜单行为。我注意到,单击子菜单项时,子菜单的单击事件丢失,因为父菜单项失去焦点,子菜单消失 使用代码更容易解释: ParentMenuBtn.Click += delegate { SubMenu.Visibility = (SubMenu.Visibility == Visibility.Visible) ? SubMenu.Collapsed

我在Silverlight中有一个菜单和子菜单结构,我希望当父菜单项失去焦点时子菜单消失-标准菜单行为。我注意到,单击子菜单项时,子菜单的单击事件丢失,因为父菜单项失去焦点,子菜单消失

使用代码更容易解释:

        ParentMenuBtn.Click += delegate
        {
            SubMenu.Visibility = (SubMenu.Visibility == Visibility.Visible) ? SubMenu.Collapsed : SubMenu.Visible;
        };
        ParentMenuBtn.LostFocus += delegate
        {
            SubMenu.Visibility = Visibility.Collapsed;
        };
        SubMenuBtn.Click += delegate
        {
            throw new Exception("This will never be thrown.");
        };
在我的示例中,单击子菜单时,触发的第一个事件是ParentMenuBtn.LostFocus(),它隐藏了子菜单的容器。一旦容器的可见性崩溃,将永远不会触发单击事件

我宁愿避免每次都隐藏子菜单,但我有点惊讶的是,点击事件从来没有因此触发

我无法在LostFocus()事件中进行任何检查,以查看我的子菜单BTN是否具有焦点,因为它在调用LostFocus()事件之后才获得焦点。换句话说,当触发LostFocus()时,subnumubtn.isFocus=false


有人对此有什么想法吗?

我已经找到了解决方案——尽管它不像我希望的那样简单、优雅。解决方案是使用一个只在执行前暂停片刻的辅助线程

我只使用一个名为ThreadState的简单对象来处理我要保留的所有状态对象:

public class ThreadState
{
    public MainPage MainPage = null;
    public UIElement TargetElement = null;

    public ThreadState(MainPage mainPage, UIElement targetElement)
    {
        this.MainPage = mainPage;
        this.TargetElement = targetElement;
    }
}
public class ThreadState
{
    public MainPage MainPage = null;
    public UIElement TargetElement = null;

    public ThreadState(MainPage mainPage, UIElement targetElement)
    {
        this.MainPage = mainPage;
        this.TargetElement = targetElement;
    }
}