2010-08-26 2 views
8

Когда я пытаюсь сфокусироваться на моем «autocompletetextbox», я сработал. Я пишу autocompletetextbox.focus() , но курсор все еще фокусируется на другом, что я должен делать или писать, чтобы разрешить писать в нем или сфокусироваться?autocompletebox focus in wpf

ответ

8

Я испытал то же самое - он не работает должным образом в его текущей форме (я ожидаю, что вы говорите об автокомплекте, который поставляется с выпуском WPFToolkit в феврале 2010 года).

Я создал подкласс:

public class AutoCompleteFocusableBox : AutoCompleteBox 
{ 
    public override void OnApplyTemplate() 
    { 
     base.OnApplyTemplate(); 
     var textbox = Template.FindName("Text", this) as TextBox; 
     if(textbox != null) textbox.Focus(); 
    } 
} 

Это устанавливает фокус фактической TextBox (так называемый «Текст»), которая является частью по умолчанию ControlTemplate.

+0

где я должен поставить этот класс Я пробовал в классе, который имеет автоматическую коробку, но она не работает? – kartal

+0

В вашем XAML вы используете это вместо 'AutoCompleteBox'. Поэтому, если у вас есть этот класс в пространстве имен XYZ, вы импортируете это пространство имен в корень файла XAML с псевдонимом, например xyz, а затем используйте Jay

+0

I попробовал, но смешал, получи мне ошибку AutoCompleteFocusableBox не поддерживает wpf !!! – kartal

1

Похоже, что вам нужно подождать, пока автоматически загрузит автозагрузку. Затем установите фокус

<sdk:AutoCompleteBox 
    x:Name="_employeesAutoCompleteBox" 
    ItemsSource="{Binding Path=Employees}" 
    SelectedItem="{Binding SelectedEmployee, Mode=TwoWay}" 
    ValueMemberPath="DisplayName" >  
</sdk:AutoCompleteBox> 
_employeesAutoCompleteBox.Loaded += 
    (sender, e) => ((AutoCompleteBox)sender).Focus(); 
5

Вы должны переопределить метод фокусировки, чтобы найти шаблон в текстовом поле.

public class FocusableAutoCompleteBox : AutoCompleteBox 
{ 
    public new void Focus() 
    { 
     var textbox = Template.FindName("Text", this) as TextBox; 
     if (textbox != null) textbox.Focus(); 
    } 
} 
+0

' using System.Windows.Controls; 'слишком – mbdavis

0

Это мое решение для установки фокуса на AutoCompleteTextBox управления Текст:

частных недействительных MyPageLoaded (объект отправителя, RoutedEventArgs е) {

var myPage = (MyControl)sender; 
var autoTextBox = (AutoCompleteTextBox)myPage.FindName("AutoTextBox"); 

if (autoTextBox != null) 
{ 
    var innerTextBox = autoTextBox.textBox; 
    if (innerTextBox != null) 
    { 
     innerTextBox.Focus(); 

    } 
} 

}

5

Это очень старый вопрос, но я хочу поделиться своей работой.

Keyboard.Focus(autocompletetextbox); 
autocompletetextbox.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next)); 

Это работает в WPFToolkit v3.5.50211.1 на Visual Studio Express 2015 for Windows Desktop

+0

Простой и работает для меня. Благодаря! – landsteven

1

Это мое решение,

Я нашел, что это проще, чем унаследовав класс

private void UserControl_Loaded(object sender, RoutedEventArgs e) 
{ 
    var textBox = FindVisualChild<TextBox>(CodedCommentBox); 
    textBox.Focus(); 
} 

private TChildItem FindVisualChild<TChildItem>(DependencyObject obj) where TChildItem : DependencyObject 
{ 
    for (var i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++) 
    { 
     var child = VisualTreeHelper.GetChild(obj, i); 

     var item = child as TChildItem; 
     if (item != null) 
     { 
      return item; 
     } 

     var childOfChild = FindVisualChild<TChildItem>(child); 
     if (childOfChild != null) 
     { 
      return childOfChild; 
     } 
    } 

    return null; 
} 
+0

Спасибо, что он работает – Harmi

Смежные вопросы