首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Silverlight AutoCompleteBox需要很长时间才能响应第一次“搜索”

Silverlight AutoCompleteBox需要很长时间才能响应第一次“搜索”
EN

Stack Overflow用户
提问于 2009-10-29 01:47:43
回答 2查看 949关注 0票数 0

我有一个Silverlight应用程序,它将六个字段的大约2000个对象加载到一个AutoCompleteBox中。然后将过滤器设置为在四个字段中的任何一个字段上进行搜索。我已将其设置为开始搜索两个字符。

然而,当我在填充对象列表之后第一次输入第二个字符(当框应该开始填充时),AutoCompleteBox大约需要6-7秒才能响应。

关于如何优化这一点,有什么建议吗?

有没有办法在填充列表后立即创建这些视觉元素,而不是等待用户开始键入?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-10-29 05:42:38

你已经调整过MinimumPrefixLength属性了吗?您需要的字符越多,过滤效果就越好。

现在,有了一个低前缀,您就有了创建的2000+可视化元素,减去一个字符的过滤,而不考虑任何其他优化。

另一种选择是实现你自己的后台线程过滤,但这违背了控件的许多目的(即简单性)。

票数 2
EN

Stack Overflow用户

发布于 2012-11-30 21:10:32

AutoCompleteBox控件中存在错误。

第一次打开DropDown时,不会使用UI虚拟化,而是由控件创建所有项。

要解决此问题,必须在 ControlTemplate.中将MaxHeight设置为Grid of dropdown Popup这是此ControlTemplate的XAML部分:

代码语言:javascript
复制
<ControlTemplate TargetType="sdk:AutoCompleteBox">
    <Grid Opacity="{TemplateBinding Opacity}">
        ...

        <Popup x:Name="Popup">
            <Grid Opacity="{TemplateBinding Opacity}" MaxHeight="450">
                <Border x:Name="PopupBorder" BorderThickness="0" Background="#11000000" HorizontalAlignment="Stretch" Opacity="0">
                    <Border.RenderTransform>
                        <TranslateTransform X="1" Y="1"/>
                    </Border.RenderTransform>
                    <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="0" HorizontalAlignment="Stretch" Opacity="1.0" Padding="0">
                        <Border.Background>
                            <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                                <GradientStop Color="#FFDDDDDD" Offset="0"/>
                                <GradientStop Color="#AADDDDDD" Offset="1"/>
                            </LinearGradientBrush>
                        </Border.Background>
                        <Border.RenderTransform>
                            <TransformGroup>
                                <TranslateTransform X="-1" Y="-1"/>
                            </TransformGroup>
                        </Border.RenderTransform>
                        <ListBox x:Name="Selector" BorderThickness="0" Background="{TemplateBinding Background}" Foreground="{TemplateBinding Foreground}" ScrollViewer.HorizontalScrollBarVisibility="Auto" ItemTemplate="{TemplateBinding ItemTemplate}" ItemContainerStyle="{TemplateBinding ItemContainerStyle}" ScrollViewer.VerticalScrollBarVisibility="Auto"/>
                    </Border>
                </Border>
            </Grid>
        </Popup>
    </Grid>
</ControlTemplate>

这对我很有效。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1638915

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档