يستغرق Silverlight Autocompletox وقتًا طويلاً للرد على "البحث" الأول

StackOverflow https://stackoverflow.com/questions/1638915

سؤال

لدي تطبيق Silverlight الذي يحمل حوالي 2000 كائن من نصف دزينة الحقول في صندوق الإكمال التلقائي. ثم يتم تعيين المرشح للبحث على أي من أربعة من الحقول. لقد قمت بتعيينه للبدء في البحث بعد حرفين.

ومع ذلك ، عندما أكتب الحرف الثاني (عندما من المفترض أن يبدأ المربع بالملء) لأول مرة بعد ملء قائمة الكائنات ، يستغرق مربع الإكمال التلقائي حوالي 6-7 ثوانٍ للرد.

أي أفكار حول كيف يمكنني تحسين هذا؟

هل هناك طريقة لإنشاء هذه العناصر المرئية مباشرة بعد أن يتم ملء القائمة بدلاً من انتظار المستخدم للبدء في الكتابة؟

هل كانت مفيدة؟

المحلول

هل قمت بتعديل propery MinimumprefixLength؟ كلما زادت الشخصيات التي تحتاجها ، سيكون التصفية أفضل.

في الوقت الحالي ، مع بادئة منخفضة ، لديك 2000+ عناصر بصرية تم إنشاؤها ، ناقصًا يقول حرف واحد للتصفية ، بغض النظر عن أي تحسينات أخرى.

خيار آخر هو تنفيذ مرشح خيوط الخلفية الخاص بك ، ولكن هذا يهزم العديد من الأغراض للتحكم (أي البساطة).

نصائح أخرى

إنه خطأ في completebox مراقبة.

عندما يتم فتح القائمة المنسدلة لأول مرة ، واجهة المستخدم الافتراضية لا يستخدم والتحكم يخلق جميع العناصر.

لإصلاح هذا يجب عليك تعيينه اقصى ارتفاع إلى جريد من القائمة المنسدلة يظهر فجأة في completebox ControlTemplate. هذا هو جزء XAML من ControlTemplate:

<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>

هذا يعمل بالنسبة لي.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top