焦点丢失时关闭弹出窗口

时间:2009-12-11 08:26:59

标签: c# .net wpf xaml

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

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

除非焦点转到搜索栏,否则如何在失去焦点时关闭Popup?

3 个答案:

答案 0 :(得分:10)

也许你可以在搜索文本框中添加一些钩子。当它获得焦点时,它可以打开弹出窗口并设置StaysOpen = true。当文本框失去焦点时,它可以在弹出窗口中设置StaysOpen = false

XAML代码:

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

答案 1 :(得分:1)

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

if(FormName.ActiveForm.ActiveControl == txtSearchBox)

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

答案 2 :(得分:1)

怎么样:

  1. 转发焦点丢失(离开,当控件不再是表单的活动控件时发生)弹出窗口事件到父表单
  2. 如果当前焦点位于搜索栏上,则父表单将不执行任何操作;否则,它会关闭弹出窗口。