1

我想处理LostFocus事件TextBox以执行一些操作。但是如果因为特殊(打开)被点击或被抓住而TextBox失去焦点,我也不想执行那个动作。按下时,首先引发事件。这是我的事件处理程序:ButtonOpenFileDialogKey.EnterKey.EnterKeyDownKeyDown

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事情?

首先,在点击之前 ,它失去了焦点。同样的方式是不能接受的。,创建新的或处理事件不满足我的要求。ButtonTextBoxButton.Focusable="False"ControlTemplateTimer.Elapsed

4

1 回答 1

0

如果我正确理解了问题,请尝试检查按钮是否获得焦点,如果是,请不要在文本框 lostfocus 事件中执行操作。如果 Iam 正确的按钮应该在文本框 lostfocus 事件引发之前聚焦。

if (!isEnterClicked && !button.Focused)
{
    //do stuff
}
于 2011-07-20T10:58:04.767 回答