自定义用户控制的焦点控制

时间:2014-01-28 17:01:09

标签: c# wpf .net-4.0 focus

我定义了一个UserControl:

UserControl
  TextBox
  Button (Clear)

我在GotFocus上有一个UserControl处理程序,因此无论何时获得焦点,它都会调用TextBox.Focus()。我遇到的问题是,如果我单击清除按钮,它会清除文本,然后重新聚焦到文本框,在我的控件上触发两个GotFocus事件。我希望这可以作为:

  • One GotFocus活动
  • One GotFocus事件(按钮),One LostFocus事件(按钮),One GotFocus事件(文本框)

我玩FocusManager.IsFocusScope无济于事。在我致电LostFocus之前,有没有办法触发手动Textbox.Focus

1 个答案:

答案 0 :(得分:1)

在您的GotFocus事件中,您可以检查鼠标是否在清除按钮上以及是否按下了鼠标左键,在这种情况下您可以忽略对TextBox.Focus():的调用

private void UserControl_GotFocus(object sender, RoutedEventArgs e)
{
     if ((this.clearButton.IsMouseOver && Mouse.LeftButton == MouseButtonState.Pressed) == false)
     {
         this.textBox.Focus();
     }
}