2010-10-31 3 views
1

J'ai une application qui contient une zone de liste imbriquée, c'est-à-dire une zone de liste dans un listbox.itemtemplate dans le modèle d'élément d'une autre liste. Je voudrais empêcher le défilement de la zone de liste interne en faveur de simplement faire défiler la zone de liste externe. Pour le moment, il est possible de faire défiler l'une ou l'autre liste, ce qui est un peu déroutant pour l'utilisateur.Empêcher le défilement de la liste imbriquée

|----------------------- 
| 
| List Item 1 
| |--------------- 
| | Inner item 1 
| | Inner item 2  <--scrolls and I don't want it to 
| |-------------- 
| List Item 2 

Répondre

2

Je vais supposer que vous savez ce que vous faites ici, mais je vais vous offrir quelques éléments à considérer en ce qui concerne les considérations de performance.

En ce qui concerne la résolution de votre besoin d'arrêter la zone de liste intérieure de Scolling, vous pouvez utiliser mélange pour retemplate la zone de liste intérieure et remplacer le ScrollViewer avec un ContentPresenter. Cela l'empêchera de défiler.

Soyez prudent avec les considérations de performances avec les listboxes imbriquées. En particulier, vous voulez essayer d'éviter d'avoir des longueurs variables de votre liste intérieure (vos données peuvent déjà répondre à cela).

Au mieux, les éléments de la liste déroulante de hauteur variable perturberont la virtualisation de l'interface utilisateur, ce qui entravera les performances de défilement.

Au pire, il y a des rapports toujours flottant autour des personnes éprouvant des problèmes d'être en mesure de faire défiler jusqu'à la fin des listes (une question de ctp pensé à résoudre en version bêta, mais il est encore surfaçage pour certaines personnes.)

Vous pouvez également envisager d'autres implémentations pour simplifier ce que vous affichez, ou peut-être utiliser un contrôle plus léger pour le conteneur interne. StackPanel par exemple. Accordé, vous pouvez aimer la liste pour sa capacité à itérer sur vos données. Vous pouvez évaluer votre propre performance. Je recommande de tester sur un périphérique car cela peut varier de l'émulateur.

Enfin, vous pouvez également consulter les conseils ici qui a été mis en place il n'y a pas si longtemps.

Silverlight for Windows Phone 7: ListBox Scroll Performance

Il y a tout à fait quelques commentaires là-bas sur le maintien listboxes pas trop complexe pour le bien de défilement des performances sur les appareils.

Le défilement de la Listbox est très agréable lorsqu'il fonctionne au mieux.

+0

Je ne sais certainement jamais ce que je fais. Je pourrais avoir 4 articles de haut niveau et peut-être une douzaine d'articles au maximum dans chaque sous-liste. Donc, bien moins de 100 articles au total. Est-ce que ce genre de taille de données est encore un souci de performance? Pas d'images juste du texte. – stimms

+0

La directive générale n'est pas d'imbriquer des listboxes. Si vous voulez le faire, vous devriez regarder de près vos performances sur un appareil pour vérifier que vos performances correspondent à celles d'une simple zone de liste. Le fait que vous avez un nombre variable d'éléments de la liste interne est une cloche d'avertissement forte pour les raisons décrites. –

0

Je n'ai jamais vu cela mis en œuvre sur un petit écran.

Mettez votre "liste intérieure" sur une page séparée. Ceci évitera votre problème et vous permettra de créer une application avec un comportement qui correspond au comportement des autres applications que l'utilisateur a peut-être également utilisées, rendant ainsi votre application plus facile pour vos utilisateurs. d'utiliser/comprendre

+0

J'ai une situation similaire où j'ai des groupes de données et le nom de groupe en soi n'est pas très utile. Il serait très agréable d'avoir une liste d'en-têtes (liste externe) et sous chaque en-tête une liste d'éléments (liste interne). Cela semble être un match pour l'application de personnes où l'en-tête est la lettre de l'alphabet et les gens sont la liste intérieure. Êtes-vous d'accord? –

+1

@Ryan Pedersen vous voulez le LongListSelector (voir http: //silverlight.codeplex.com/releases/view/60291) ceci est différent de ce qui a été décrit dans la question originale. –

+0

Merci beaucoup! C'est exactement ce que je cherchais. –

0

ScrollViewer.VerticalScrollBarVisibility = "Désactivé" a fonctionné pour moi dans une situation similaire.

Questions connexes