【问题标题】:Custom Search on objects in Metro / Modern UIMetro / Modern UI 中对象的自定义搜索
【发布时间】:2012-09-10 23:10:08
【问题描述】:

我正在为 Windows 8 实现一个应用程序。它将从 xml 中搜索大量数据。

所以现在我使用文本框和列表视图来显示搜索结果,但是当我使用文本框事件时,TextChanged 会减慢输入速度,因为它会为输入的每个字母执行新搜索。

所以问题是,如何在 Metro / Modern ui 中进行延迟,以在输入几个字母后触发事件,而不是一个。

【问题讨论】:

    标签: c# windows-8 microsoft-metro asp.net-4.5


    【解决方案1】:

    不鼓励您将任何可能使 UI 陷入困境的东西作为同步任务运行。尝试将其作为后台任务运行,该任务在完成时更新 UI。请参阅Background TaskTimeTrigger 了解更多信息。在任务完成时使用Core Dispatcher 更新用户界面。 Core Dispatcher example

    【讨论】:

    • 太棒了!这就是我需要的。我想我会带着这个和魅力去,它对应用程序的其余部分也很有用。非常感谢!可悲的是我不能接受两个答案:(
    • 我不是必须有 15 个声望才能做到这一点。我还想念 10 点。
    【解决方案2】:

    您不应创建自己的搜索体验。您应该挂钩到 SearchPane 并在那里处理它。

    SearchPane searchPane = SearchPane.GetForCurrentView();
    searchPane.QuerySubmitted += searchPane_QuerySubmitted;
    searchPane.SuggestionsRequested += searchPane_SuggestionsRequested;
    

    然后您可以在处理程序中根据需要处理事件。如果您提供建议并且您有一个缓慢运行的异步进程,您可能会得到延迟。

    void searchPane_SuggestionsRequested(SearchPane sender, SearchPaneSuggestionsRequestedEventArgs args)
    {
        var deferral = args.Request.GetDeferral();
        // do real time type ahead here
        deferral.Complete();
    }
    
    void searchPane_QuerySubmitted(SearchPane sender, SearchPaneQuerySubmittedEventArgs args)
    {
        // complete search here
    }
    

    【讨论】:

    • 好吧,这样效果更好,有点遗憾,它必须通过魅力,而不能用普通的文本框来做到这一点。但它会做的。非常感谢您的帮助!
    • 您能否使用涉及SearchBox 控件的新建议来更新此内容? msdn.microsoft.com/en-us/library/windows/apps/hh465233.aspx
    【解决方案3】:

    为什么不使用“离开”事件而不是文本框的文本更改事件?当用户在文本框中完成输入时,它会变得更流畅。

    【讨论】:

    • 更直观的只是打字、打字和离开是不行的。当用户开始输入时,我还想要一些排序建议。
    猜你喜欢
    • 1970-01-01
    • 2014-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-27
    • 2015-11-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多