无法在Windows 8中使用自动完成框

时间:2013-02-26 10:14:43

标签: windows-8 windows-runtime windows-store-apps winrt-xaml

我安装了nudget autocomplete工具包但不幸的是我发现这个控件没有足够的属性作为自动完成功能。它有ItemsSource但它不会显示您键入内容时筛选的项目列表。我也在寻找像textChanged之类的东西,以便我可以调用我的服务并再次获得结果并绑定itemsource。

3 个答案:

答案 0 :(得分:1)

Syncfusion WinRT Studio中的TextBoxExt控件具有足够的功能,可用作自动完成功能。它有超过15种建议模式,包括自定义过滤选项。希望这会有所帮助。

http://www.syncfusion.com/products/winrt/controls

答案 1 :(得分:1)

以下是Group Contacts中使用的实现:

XAML:

xmlns:Interactivity="using:Microsoft.Xaml.Interactivity" 
xmlns:behaviors="using:MyNamespace.Behaviors"

<TextBox x:Name="Searchbox" PlaceholderText="contact's name" Width="250" 
         IsTextPredictionEnabled="False"
         IsSpellCheckEnabled="False"
         VerticalAlignment="Center">

    <Interactivity:Interaction.Behaviors>
        <Core:EventTriggerBehavior EventName="KeyUp">
            <behaviors:FilterContactAction />
        </Core:EventTriggerBehavior>
    </Interactivity:Interaction.Behaviors>
</TextBox>

代码:

public class FilterContactAction : DependencyObject, IAction
{
    string _previousResult = null;

    public object Execute(object sender, object parameter)
    {
        var textbox = sender as TextBox;
        var keyEventArgs = parameter as KeyRoutedEventArgs;

        var noChanges = textbox.Text == _previousResult;
        var deletionOccurred =   keyEventArgs.Key == VirtualKey.Back ||
                                keyEventArgs.Key == VirtualKey.Delete;

        if (noChanges || deletionOccurred)
        {
            return null;
        }

        var viewModel = ResourceLocator.Instance[typeof(HomeViewModel)] as HomeViewModel;
        viewModel.CanSearch = FindMatch(textbox, viewModel.Contacts);

        return null;
    }

    private bool FindMatch(TextBox textbox, ObservableCollection<Contact> contacts)
    {
        foreach (var contact in contacts)
        {
            var suggestionDisplayed = DisplaySuggestion(textbox, contact);

            if (suggestionDisplayed)
            {
                return true;
            }
        }

        return false;
    }

    private bool DisplaySuggestion(TextBox textbox, Windows.ApplicationModel.Contacts.Contact contact)
    {
        var characterCount = textbox.Text.Count();
        var suggestionDisplayed = false;

        var isMatch = contact.DisplayName.ToUpper().StartsWith(textbox.Text.ToUpper());

        if (isMatch)
        {
            textbox.Text = contact.DisplayName;
            textbox.SelectionStart = characterCount;
            textbox.SelectionLength = textbox.Text.Length - textbox.SelectionStart;

            _previousResult = textbox.Text;

            suggestionDisplayed = true;
        }

        return suggestionDisplayed;
    }
}

答案 2 :(得分:0)

不确定您使用的是什么。不能告诉你为什么它也不起作用。但去年我想要AutoCompleteTextBox并最终自己编写。

你可以在这里找到它。 https://github.com/hermitdave/HermitDaveWinRTControls