2010-08-26 15 views
8

quando provo a mettere a fuoco il mio "autocompletetextbox" non sono riuscito a scrivere autocompletetextbox.focus() ma il cursore si focalizza ancora su un altro cosa dovrei fare o scrivere per consentire di scrivere in esso o mettere a fuoco?focus autocompletebox nel wpf

risposta

8

Ho sperimentato la stessa cosa: non funziona correttamente nella sua forma attuale (mi aspetto che tu stia parlando di AutoCompleteBox incluso nella versione di WPFToolkit di febbraio 2010).

ho creato una sottoclasse:

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

Questo imposta l'attivazione al reale TextBox (chiamato "Text"), che fa parte del predefinito ControlTemplate.

+0

dove devo mettere questa classe Ho provato alla classe che ha la scatola auto completa ma non funziona? – kartal

+0

Nel tuo XAML usi questo invece di 'AutoCompleteBox'. Quindi se hai questa classe nello spazio dei nomi XYZ, importi quel namespace nella radice del file XAML, con un alias come xyz e poi usi Jay

+0

I provato ma mescolato fammi un errore AutoCompleteFocusableBox non supporta wpf !!! – kartal

1

Sembra che sia necessario attendere prima che la casella di completamento automatico venga caricata. Quindi impostare concentrarsi

<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

si dovrà eseguire l'override del metodo di messa a fuoco per trovare il modello della casella di testo.

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

' utilizzando System.Windows.Controls; 'anche – mbdavis

0

Questa è la mia soluzione per la messa a fuoco su AutoCompleteTextBox Controllo testo:

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

Questo è molto vecchia domanda, ma voglio condividere il mio work-around.

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

Questo funziona in WPFToolkit v3.5.50211.1 su Visual Studio Express 2015 for Windows Desktop

+0

Semplice e funziona per me. Grazie! – landsteven

1

Questa è la mia soluzione,

ho trovato più facile che avendo ereditato classe

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

Grazie, funziona – Harmi