【问题标题】:Close Popup when focus lost失去焦点时关闭弹出窗口
【发布时间】:2009-12-11 08:26:59
【问题描述】:

我有一个包含 ListView 的弹出窗口。 ListView 包含客户姓名。单击搜索栏时会打开弹出窗口。用户可以在搜索栏(TextBox)中输入文本,Listview会根据输入进行过滤。

我想在弹出窗口失去焦点时关闭它。但是,默认的“自动关闭”行为StaysOpen="False" 并不好,因为它会在每次有人点击搜索栏时关闭弹出窗口。

如何在弹出窗口失去焦点时始终关闭它,除非焦点转到搜索栏?

【问题讨论】:

    标签: c# .net wpf xaml


    【解决方案1】:

    也许您可以在搜索文本框上放置一些钩子。当它接收到焦点时,它可以打开弹出窗口并设置StaysOpen = true。当文本框失去焦点时,可以在弹窗上设置StaysOpen = false

    XAML 代码:

     <Popup x:Name="pop" StaysOpen="False">
    

    【讨论】:

      【解决方案2】:

      向 Leave 事件添加事件处理程序(在失去对控件的焦点时调用)。在此事件处理程序中,您可以检查具有焦点的新项目是否是搜索文本框。

      if(FormName.ActiveForm.ActiveControl == txtSearchBox)

      然后根据搜索文本框是否有焦点适当地设置StaysOpen

      【讨论】:

        【解决方案3】:

        怎么样:

        1. 将popup的focus-lost(离开,控件不再是窗体的活动控件时发生)事件转发到父窗体
        2. 如果当前焦点在搜索栏上,父窗体什么也不做;否则,它将关闭弹出窗口。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-12-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-01-29
          相关资源
          最近更新 更多