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