当文本框失去焦点时,LostKeyboardFocus事件不会触发

时间:2016-03-22 15:44:34

标签: c# wpf mvvm textbox mvvm-light

我在MVVM灯的帮助下使用MVVM模式。当我单击一个按钮时,我更改了文本框可见性所绑定的可见性属性。当我失去焦点时,触发器应该执行并折叠文本框。问题是文本框永远不会失去焦点。

<TextBox x:Name="TextBox" 
                 Text="{Binding TextBoxText, Mode=TwoWay}" 
                 Visibility="{Binding TextBoxVisibility}"
                 Grid.Row="0"
                 Grid.Column="0"
                 HorizontalAlignment="Left" 
                 VerticalAlignment="Bottom"
                 Height="30" Width="100"
                 TextWrapping="Wrap">
        <i:Interaction.Triggers>
            <i:EventTrigger EventName="LostKeyboardFocus">
                <command:EventToCommand Command="{Binding CollapseTextBoxCommand}"/>
            </i:EventTrigger>
        </i:Interaction.Triggers>
    </TextBox>

CollapseTextBoxCommandTextBoxVisibility属性更改为Visibility.Collapsed。

这是按钮

<Button Name="AddButton"
            Command="{Binding ShowTextBoxCommand}"
            Grid.Column="0" Grid.Row="1"></button>

ShowTextBoxCommand将TextBoxVisibility属性更改为Visibility.Visibile。

Here is a recorded screencapture of the problem I'm talking about.

应该发生什么,当我点击文本框时,它应该会破坏可见性。

非常感谢任何帮助。感谢。

2 个答案:

答案 0 :(得分:1)

我建议查看旧的stackoverflow问题TextBox LostFocus does not fire。我在虚拟项目上尝试了一些东西,而我无法使用LostKeyboardFocus或PreviewLostKeyboardFocus,正如另一个问题所示。

我尝试过,我确认它有效,就是在WPF窗口本身创建一个eventtrigger,以检测何时点击文本框以外的其他地方:

<i:Interaction.Triggers>
    <i:EventTrigger EventName="MouseUp">
        <command:EventToCommand Command="{Binding ShowTextBoxCommand}" />
    </i:EventTrigger>
</i:Interaction.Triggers>

当然,如果您愿意,可以使用MouseDown。

答案 1 :(得分:0)

我认为它对MVVM模式没有任何作用,因此我尝试使用ButtonCheckBoxTextBox来复制您的问题,其中CheckBox作为一个可聚焦的控件,有助于消除TextBox的焦点。请尝试以下代码段。

XAML:

<UniformGrid Columns="1">
    <TextBox Name="textBox"
             Text="Text is coming"
             LostKeyboardFocus="TextBox_LostKeyboardFocus" />
    <Button Content="getFocusButton"
            Click="AddButton_Click" />
    <CheckBox Content="dummyCheck" />
</UniformGrid>

xaml.cs:

private void TextBox_LostKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e)
{
    (sender as TextBox).Visibility = Visibility.Collapsed;
}

private void AddButton_Click(object sender, RoutedEventArgs e)
{
    textBox.Visibility = Visibility.Visible;
}

根据您的屏幕截图,我认为您的LostKeyBoardFocus事件未被触发的原因是因为当您的TextBox聚焦时,您点击的黑色背景无法调焦,因此关注TextBox根本没有丢失。

因此,在我的代码段中,我添加了CheckBox。关注TextBox后,点击Visibilty并将其聚焦后,其CheckBox将会展开。