我在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>
CollapseTextBoxCommand
将TextBoxVisibility
属性更改为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.
应该发生什么,当我点击文本框时,它应该会破坏可见性。
非常感谢任何帮助。感谢。
答案 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模式没有任何作用,因此我尝试使用Button
,CheckBox
和TextBox
来复制您的问题,其中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
将会展开。