我有一个自定义的UWP控件,我在其中使用弹出窗口,如何检测弹出窗口丢失的焦点?
我在控件中有几个选项卡,当我单击任意一个选项卡时,弹出窗口应该可见,反之亦然,并且我的选项卡具有指示弹出状态的状态。
现在,我需要在弹出窗口外单击时关闭弹出窗口。我完成了研究,发现一个属性 IsLightDismissEnabled ,该属性会自动关闭弹出窗口并调用LostFocus。但是当在选项卡之间切换时,不应关闭弹出窗口,但是当我使用此属性时,弹出窗口会自动关闭,这是我不希望的。
这是我的代码 在代码im中,根据Popup是否已打开以及是否选择了新选项卡来更新状态。 在状态属性中,即时更新弹出窗口可见性
if (this.PART_Popup != null)
{
this.PART_Popup.LostFocus += this.PART_Popup_LostFocus;
this.PART_Popup.IsLightDismissEnabled = true;
}
private void PART_Popup_LostFocus(object sender, RoutedEventArgs e)
{
if (this.ParentItemsControl != null)
{
if (this.ParentItemsControl.State == State.Adorner)
{
if (this.ParentItemsControl.PART_Popup.IsOpen && this.ParentItemsControl.SelectedItem == this)
{
this.ParentItemsControl.State = State.Hide;
}
}
else
{
this.ParentItemsControl.State = State.Normal;
}
}
}
有什么方法可以仅调用LostFocus吗?我可以使用我的代码来关闭弹出窗口还是将其保持打开状态(切换选项卡时)? 在启用上述属性时,我还发现某些双击事件不起作用,我也不知道为什么。因此,我们将不胜感激。
答案 0 :(得分:0)
使用属性IsLightDismissEnabled
时,它将始终关闭Popup
,如果您愿意保留自定义控件的功能,我认为您不应该使用此属性。而是应该手动处理打开和关闭。
我认为您应该尝试使用LostFocus
和Opened
事件,而不是尝试处理Closed
事件,并利用可写属性IsOpen
手动打开和关闭Popup
。
希望有帮助