仅在弹出窗口之外单击而不隐藏弹出窗口时如何检测弹出窗口LostFocus

时间:2019-05-02 12:47:20

标签: c# uwp popup

我有一个自定义的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吗?我可以使用我的代码来关闭弹出窗口还是将其保持打开状态(切换选项卡时)? 在启用上述属性时,我还发现某些双击事件不起作用,我也不知道为什么。因此,我们将不胜感激。

1 个答案:

答案 0 :(得分:0)

使用属性IsLightDismissEnabled时,它将始终关闭Popup,如果您愿意保留自定义控件的功能,我认为您不应该使用此属性。而是应该手动处理打开和关闭。

我认为您应该尝试使用LostFocusOpened事件,而不是尝试处理Closed事件,并利用可写属性IsOpen手动打开和关闭Popup

希望有帮助