автозаполнение фокуса в wpf - PullRequest
8 голосов
/ 26 августа 2010

, когда я пытаюсь сфокусироваться на моем "autocompletetextbox", мне не удается написать autocompletetextbox.focus(), но курсор все еще фокусируется на другом, что я должен делать или писать, чтобы включить запись в него или фокус?

Ответы [ 6 ]

8 голосов
/ 28 августа 2010

Я испытал то же самое - он не работает должным образом в его текущей форме (я думаю, вы говорите об AutoCompleteBox, который поставляется с выпуском 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.

5 голосов
/ 18 мая 2016

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

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

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

5 голосов
/ 16 августа 2012

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

public class FocusableAutoCompleteBox : AutoCompleteBox
{
    public new void Focus()
    {
        var textbox = Template.FindName("Text", this) as TextBox;
        if (textbox != null) textbox.Focus();
    }
}
1 голос
/ 16 августа 2017

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

Мне было проще, чем унаследовать класс

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;
}
1 голос
/ 20 апреля 2012

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

<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();
0 голосов
/ 12 мая 2014

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

private void MyPageLoaded (отправитель объекта, RoutedEventArgs e) {

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

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

    }
}

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...