我想处理LostFocus
事件TextBox
以执行一些操作。但是如果因为特殊(打开)被点击或被抓住而TextBox
失去焦点,我也不想执行那个动作。按下时,首先引发事件。这是我的事件处理程序:Button
OpenFileDialog
Key.Enter
Key.Enter
KeyDown
KeyDown
public void TextBox_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
{
if (e != null && sender != null)
if (e.Key == System.Windows.Input.Key.Enter && !String.IsNullOrWhiteSpace(((TextBox)sender).Text))
{
e.Handled = true;
isEnterClicked = true;
((System.Windows.Controls.TextBox)sender).Visibility = System.Windows.Visibility.Collapsed;
}
}
按下 Key.Enter 后,TextBox.Visibility 发生变化,该操作符将引发 LostFocus 事件。
public void TextBox_LostFocus(object sender, RoutedEventArgs e)
{
try
{
if (!isEnterClicked)
{
DependencyObject dob = (DependencyObject)sender;
while ( !(dob is ItemsControl))
{
dob = VisualTreeHelper.GetParent(dob);
}
dynamic myCmd = dob.GetValue(Control.DataContextProperty);
myCmd.SomeCommand.Execute(((TextBox)sender).GetValue(Control.DataContextProperty));
}
}
finally
{
isEnterClicked = false;
}
}
LostFocus
处理程序首先观察是否isEnterPressed
等于 false,它的意思是,TextBox
失去焦点不是因为按下了 enter。SomeCommand
将删除一些绑定到的项目TextBox
,它会消失。
问:那么,如何对事件做同样的Button.Click
事情?
首先,在点击之前 ,它失去了焦点。同样的方式是不能接受的。,创建新的或处理事件不满足我的要求。Button
TextBox
Button.Focusable="False"
ControlTemplate
Timer.Elapsed