2013-08-24 4 views
3

J'utilise un LongListSelector et la barre de défilement sur la droite ajoute un peu d'espace vide qui gâche le design, donc je veux le cacher. Je l'ai essayé ce qui suit:Masquer la barre de défilement dans LongListSelector

ScrollBar sb = ((FrameworkElement)VisualTreeHelper.GetChild(FileList, 0)) 
          .FindName("VerticalScrollBar") as ScrollBar; 
sb.Width = 0; 

Mais ce ne fonctionne pas pour WP8, je peux faire la plus grande largeur bien mais pas plus petit. Il a une propriété ScrollViewer.VerticalScrollBarVisibility mais en la changeant en Hidden ou Disabled ne fait rien.

/Edit:

Cela semble fonctionner:

var sb = ((FrameworkElement) VisualTreeHelper.GetChild(FileList, 0)) 
.FindName("VerticalScrollBar") as ScrollBar; 
sb.Margin = new Thickness(-10, 0, 0, 0); 

Mais si quelqu'un a une méthode plus propre que je voudrais encore l'entendre.

+0

duplication possible de [WP7 - LongListSelector, comment masquer la barre de défilement verticale] (http://stackoverflow.com/questions/16131496/wp7-longlistselector-how-to-hide-vertical-scroll-bar) – caschw

+0

@caschw Ce n'est pas pareil, c'est là que j'ai trouvé la première méthode qui ne marche pas sur wp8. – Jesse

+0

Après avoir exploré les méthodes et la hiérarchie de contrôle, il n'y a rien de strictement "propre". Les seules modifications que vous pouvez apporter sont de définir la largeur de la barre de défilement sur 0 et Marge sur new Thickness() sans paramètres pour une marge de 0. – lsuarez

Répondre

6

Vous pouvez résoudre ce problème en supprimant la totalité du contrôle.

Ajouter cette ressource:

<Style x:Key="LongListSelectorWithNoScrollBarStyle" TargetType="phone:LongListSelector"> 
    <Setter Property="Background" Value="Transparent"/> 
    <Setter Property="Foreground" Value="{StaticResource PhoneForegroundBrush}"/> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="phone:LongListSelector"> 
       <Grid Background="{TemplateBinding Background}" d:DesignWidth="480" d:DesignHeight="800"> 
        <VisualStateManager.VisualStateGroups> 
         <VisualStateGroup x:Name="ScrollStates"> 
          <VisualStateGroup.Transitions> 
           <VisualTransition GeneratedDuration="00:00:00.5"/> 
          </VisualStateGroup.Transitions> 
          <VisualState x:Name="Scrolling" /> 
          <VisualState x:Name="NotScrolling"/> 
         </VisualStateGroup> 
        </VisualStateManager.VisualStateGroups> 
        <Grid Margin="{TemplateBinding Padding}"> 
         <ViewportControl x:Name="ViewportControl" HorizontalContentAlignment="Stretch" VerticalAlignment="Top"/> 
        </Grid> 
       </Grid> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

Utilisez la ressource

<phone:LongListSelector Style="{StaticResource LongListSelectorWithNoScrollBarStyle}"> 
    .... 
</phone:LongListSelector> 

Voila. Pas de barre de défilement.

+0

De quelle ligne d'importation ai-je besoin dans mon xaml pour qu'il reconnaisse 'd: DesignWidth' et' d: DesignHeight'? – Navigateur

+0

Excellente solution. – Senkwe

Questions connexes