ListBox وVirtualizingStackPanel والتمرير السلس في WPF
-
20-09-2019 - |
سؤال
انا املك ListBox
التي قد تحتوي على العديد من صفوف سجلات قاعدة البيانات النموذجية، بما في ذلك Image
, ، ملزمة ل ObservableCollection<MyItem>
.في بعض الأحيان يمكن أن تحتوي المجموعة على آلاف العناصر.
الأداء رائع، لكن التمرير هو السلوك المتقلب الافتراضي.أود أن يكون التمرير سلسًا، لذلك قمت بإلغاء التحديد ScrollViewer.CanContentScroll
.
الآن لدي تمرير سلس، لكن الأداء مروع:يتم استرداد البيانات في موضوع منفصل، وينتهي الموضوع بسرعة، ولكن الأمر يستغرق من 10 إلى 20 ثانية حتى تظهر النتائج في ListBox
.أفترض أن هذا بسبب إلغاء التحديد ScrollViewer.CanContentScroll
يغير الأساس VirtualizingStackPanel
إلى منتظم StackPanel
ولذلك يتم تحميل المجموعة بأكملها قبل عرض النتائج.
لذا سؤالي هو هذا:كيف يمكنني الاحتفاظ بالتمرير السلس دون التضحية بـ VirtualizingStackPanel
السلوك والأداء؟
المحلول
عند قمت بإلغاء تحديد CanContentScroll، يمكنك تفقد الافتراضية . والجواب هو محبط حقا: الآن لا يوجد حل الخروج من مربع: (
وPS: ليست هذه هي المشاركة الأولى هنا، يسأل <لأ href = "https://stackoverflow.com/questions/1033841/is-it-possible-to-implement-smooth-scroll-in-a-wpf -listview "> هذا السؤال جدا .
نصائح أخرى
إذا كنت تستخدم .NET 4.5 (أو 4.0 إذا كنت ترغب في الاختراق قليلاً) فهناك إجابة هنا.
[لاحظ أن تعليق @Guilluame كان هنا قبل هذه الإجابة بكثير ولكنه لم يكن مرئيًا بشكل خاص عند البحث عن الإجابات.]