【问题标题】:Focus control for Custom User Control自定义用户控件的焦点控件
【发布时间】:2014-02-20 03:06:43
【问题描述】:

我有一个这样定义的 UserControl:

UserControl
  TextBox
  Button (Clear)

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

  • 一个 GotFocus 事件
  • 一个 GotFocus 事件(按钮)、一个 LostFocus 事件(按钮)、一个 GotFocus 事件(文本框)

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

【问题讨论】:

  • 尝试将 UserControl 上的 IsFocusable 设置为 false?
  • 目前,我似乎已经通过将按钮标记为Focusable=False...来解决这个问题。我不确定我是否认为这是一个很好的解决方案,因为它所做的只是让清除按钮点击根本不像改变焦点
  • 是的,我就是这个意思。 Focusable = false。抱歉没有测试。

标签: c# wpf .net-4.0 focus


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2012-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多