LostFocus处理问题

时间:2011-07-20 09:34:02

标签: c# wpf textbox lostfocus

我想处理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失去焦点而不是因为输入被按下了。 SomeCommand将删除绑定到TextBox的某个项目,它将消失。

问:那么,如何对Button.Click事件做同样的事情呢?

首先,之前 Button点击,TextBox失去了焦点。同样的方式是不可接受的。 Button.Focusable="False",创建新的ControlTemplate或处理Timer.Elapsed事件不符合我的要求。

1 个答案:

答案 0 :(得分:0)

如果我正确理解问题,请尝试检查按钮是否已聚焦,如果是,请勿在textbox lostfocus事件中执行操作。如果Iam正确按钮应该在文本框lostfocus事件引发之前被聚焦。

if (!isEnterClicked && !button.Focused)
{
    //do stuff
}