如果DataGrid没有聚焦,则TextBox失去焦点时隐藏DataGrid

时间:2013-05-30 20:23:17

标签: wpf vb.net datagrid textbox focus

我有一个文本框和DataGrid

虽然文本框失去了焦点,如果DataGrid没有聚焦,那么我想隐藏DataGrid。

我使用以下代码。

Private Sub txt_LostFocus(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles txt.LostFocus

    If DataGrid1.IsFocused = False Then
        DataGrid1.Visibility = Windows.Visibility.Hidden
    End If

End Sub

使用此代码,即使我单击DataGrid上的任何Item,DataGrid也会隐藏。

我的代码有问题吗?

2 个答案:

答案 0 :(得分:1)

我不确定问题是什么......您描述的行为与您的代码一致。

行为可能与您期望的不同...... 我认为当 TextBox失去焦点时,DataGrid永远不会有焦点,因为 TextBox没有完成失去焦点。这是问题吗?

如果这是问题,你可以在隐藏DataGrid之前添加某种延迟(当然是以非阻塞的方式)。你可以创建一个新线程,在隐藏控件之前在该线程上执行Sleep(500),看看会发生什么。 您还需要注意,因为只有UI线程可能会更改可见控件,但如果您选择这样做,可以请求进一步的帮助。

我希望它有所帮助。

答案 1 :(得分:0)

当文本框lostfocus甚至被解雇时... gridview还没有集中注意力......

所以,添加这样的东西

Dim lDGVFocused as Boolean

Private Sub Datagrid1_Enter( ... ) ...

  lDGVFocused = True

End Sub

Private Sub Datagrid1_LostFocus( ... ) ...

  lDGVFocused = False

End Sub

Private Sub txt_LostFocus( ... ) ...

    If not lDGVFocused then DataGrid1.Visible = False

End Sub

Private Sub txt_GotFocus( ... ) ...

   DataGrid1.Visible = True

End Sub