autocompletebox专注于wpf

时间:2010-08-26 05:39:47

标签: c# wpf autocomplete

当我尝试专注于我的“autocompletetextbox”时,我写了autocompletetextbox.focus() 但光标仍然集中在另一个我应该做什么或写什么以便能够写入或焦点?

7 个答案:

答案 0 :(得分:8)

我遇到了同样的事情 - 它在当前形式下无法正常工作(我希望您在谈论2010年2月发布的WPFToolkit附带的AutoCompleteBox)。

我创建了一个子类:

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(称为“文字”)。

答案 1 :(得分:5)

您必须覆盖Focus方法才能找到文本框的模板。

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

答案 2 :(得分:5)

这是一个非常古老的问题,但我想分享我的解决方法。

WPFToolkit v3.5.50211.1

这适用于Visual Studio Express 2015 for Windows Desktop

上的{{1}}

答案 3 :(得分: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();

答案 4 :(得分: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;
}

答案 5 :(得分:0)

这是我将注意力集中在AutoCompleteTextBox控件Text:

上的解决方案

private void MyPageLoaded(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();

    }
}

}

答案 6 :(得分:0)

您还可以为此使用扩展方法:

public static void ForceFocus(this AutoCompleteBox box)
{
    if (box.Template.FindName("Text", box) is TextBox textbox)
    {
        textbox.Focus();
    }
}