2010-08-26 16 views
8

cuando trato de enfocarme en mi "autocompletetextbox" Fallé Escribo autocompletetextbox.focus() pero el cursor todavía se enfoca en otro ¿qué debo hacer o escribir para poder escribir en él o enfocar?autocompletebox focus en wpf

Respuesta

8

Experimenté lo mismo: no funciona correctamente en su forma actual (supongo que está hablando de AutoCompleteBox que viene con el lanzamiento de WPFToolkit en febrero de 2010).

he creado una subclase:

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

Este establece el foco a la actual TextBox (llamado "texto") que forma parte del defecto ControlTemplate.

+0

donde debo poner esta clase Intenté en la clase que tiene el cuadro de autocompletar pero no funciona. – kartal

+0

En su XAML utiliza esto en lugar de 'AutoCompleteBox'. Entonces, si tiene esta clase en el espacio de nombres XYZ, importe ese espacio de nombres en la raíz del archivo XAML, con un alias como xyz y luego use Jay

+0

I intentado pero mezcla, dame un error AutoCompleteFocusableBox no es compatible con wpf !!! – kartal

1

Parece que tiene que esperar a que se cargue primero la caja de autocompletar. A continuación, establecer el foco

<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

que tendrá que reemplazar el método de enfoque para encontrar la plantilla de la caja de texto.

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; 'too – mbdavis

0

Esta es mi solución para establecer el foco en AutoCompleteTextBox Control de texto:

MyPageLoaded private void (object sender, RoutedEventArgs e) {

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

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

    } 
} 

}

5

Esto es muy vieja pregunta, pero quiero compartir mi trabajo.

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

Esto funciona en WPFToolkit v3.5.50211.1 en Visual Studio Express 2015 for Windows Desktop

+0

Simple y funciona para mí. ¡Gracias! – landsteven

1

Ésta es mi solución,

me pareció más fácil que haber heredado clase

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

Gracias, funciona – Harmi