2014-01-28 4 views
2

У меня есть UserControl определенно, что:Управления фокусировки для контроля пользовательского пользователя

UserControl 
    TextBox 
    Button (Clear) 

У меня есть GotFocus обработчика на UserControl так, что всякий раз, когда он получает фокус, он вызывает TextBox.Focus(). Проблема, с которой я сталкиваюсь, заключается в том, что если я нажимаю кнопку очистки, она очищает текст и затем переориентируется на текстовое поле, вызывая два события GotFocus на моем элементе управления. Я хочу, чтобы это действовать либо как:

  • Один GotFocus события
  • Один GotFocus события (кнопка), один LostFocus события (кнопка), один GotFocus события (текстовое поле)

Я играл с FocusManager.IsFocusScope безрезультатно. Есть ли способ вызвать руководство LostFocus прямо перед тем, как позвонить Textbox.Focus?

+0

Попробуйте установить IsFocusable на UserControl как false? –

+0

В настоящее время я, похоже, исправил это, отметив кнопку как «Фокусное = Ложное» .... Я не уверен, что считаю это хорошим решением, поскольку все, что он делает, это сделать так, чтобы чистый щелчок кнопки не срабатывал изменение фокуса вообще –

+0

@lll Не работает –

ответ

1

В вашем случае GotFocus вы можете проверить ли мышь находится над кнопкой ясной и нажата ли левая кнопка мыши, в таком случае вы можете игнорировать вызов TextBox.Focus():

private void UserControl_GotFocus(object sender, RoutedEventArgs e) 
{ 
    if ((this.clearButton.IsMouseOver && Mouse.LeftButton == MouseButtonState.Pressed) == false) 
    { 
     this.textBox.Focus(); 
    } 
} 
Смежные вопросы