2010-06-12 5 views

Répondre

2

Si je comprends correctement votre demande:

  1. Vous ne pas veulent vraiment faire la ListView pour faire défiler vos données au centre
  2. Vous faites veulent faire apparaître la barre de défilement ListView apparaissent différemment

Par exemple, si vous utilisez un GridView et vous voulez que la barre de défilement horizontale à convertir en boutons situés à gauche et à droite de votre point de vue, vous pouvez le style de cette façon:

<Style x:Key="{x:Static GridView.GridViewScrollViewerStyleKey}" TargetType="{x:Type ScrollViewer}"> 
    <Setter Property="Focusable" Value="false"/> 
    <Setter Property="Template"> 
    <Setter.Value> 
     <ControlTemplate TargetType="{x:Type ScrollViewer}"> 
     <DockPanel Background="{TemplateBinding Background}" SnapsToDevicePixels="true"> 

      <RepeatButton DockPanel.Dock="Left" 
         Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}" 
         Command="{x:Static ScrollBar.LineLeftCommand}" 
         Content="{StaticResource ScrollLeftArrow}"/> 

      <RepeatButton DockPanel.Dock="Right" 
         Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}" 
         Command="{x:Static ScrollBar.LineRightCommand}" 
         Content="{StaticResource ScrollRightArrow}"/> 

      <ScrollBar DockPanel.Dock="Right" 
        Name="PART_VerticalScrollBar" 
        Orientation="Vertical" 
        Minimum="0.0" 
        Maximum="{TemplateBinding ScrollableHeight}" 
        ViewportSize="{TemplateBinding ViewportHeight}" 
        Value="{Binding Path=VerticalOffset,RelativeSource={RelativeSource TemplatedParent},Mode=OneWay}" 
        Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}" 
        Cursor="Arrow"/> 

      <ScrollBar DockPanel.Dock="Bottom" 
        Name="PART_HorizontalScrollBar" 
        Visibility="Hidden" 
        Orientation="Horizontal" /> 

      <DockPanel Margin="{TemplateBinding Padding}"> 
      <ScrollViewer DockPanel.Dock="Top" 
          HorizontalScrollBarVisibility="Hidden" 
          VerticalScrollBarVisibility="Hidden" 
          Focusable="false"> 
       <GridViewHeaderRowPresenter Margin="2,0,2,0" 
              Columns="{Binding Path=TemplatedParent.View.Columns,RelativeSource={RelativeSource TemplatedParent}}" 
              ColumnHeaderContainerStyle="{Binding Path=TemplatedParent.View.ColumnHeaderContainerStyle,RelativeSource={RelativeSource TemplatedParent}}" 
              ColumnHeaderTemplate="{Binding Path=TemplatedParent.View.ColumnHeaderTemplate,RelativeSource={RelativeSource TemplatedParent}}" 
              ColumnHeaderTemplateSelector="{Binding Path=TemplatedParent.View.ColumnHeaderTemplateSelector,RelativeSource={RelativeSource TemplatedParent}}" 
              AllowsColumnReorder="{Binding Path=TemplatedParent.View.AllowsColumnReorder,RelativeSource={RelativeSource TemplatedParent}}" 
              ColumnHeaderContextMenu="{Binding Path=TemplatedParent.View.ColumnHeaderContextMenu,RelativeSource={RelativeSource TemplatedParent}}" 
              ColumnHeaderToolTip="{Binding Path=TemplatedParent.View.ColumnHeaderToolTip,RelativeSource={RelativeSource TemplatedParent}}" 
              SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/> 
      </ScrollViewer> 
      <ScrollContentPresenter Name="PART_ScrollContentPresenter" 
            KeyboardNavigation.DirectionalNavigation="Local" 
            Content="{TemplateBinding Content}" 
            ContentTemplate="{TemplateBinding ContentTemplate}" 
            CanContentScroll="{TemplateBinding CanContentScroll}" 
            SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/> 
      </DockPanel> 

     </DockPanel> 
     </ControlTemplate> 
    </Setter.Value> 
    </Setter> 
</Style> 

Ce que cela fait est modifier le modèle ScrollViewer utilisé dans GridView se composent de:

  • Deux boutons de répétition, accosté aux côtés gauche et droit et utilisé pour défiler vers la gauche et à droite
  • Une barre de défilement vertical en cas défilement vertical est nécessaire
  • Une barre de défilement horizontale cachée pour satisfaire ScrollViewer (il dépend d'un scrollbar réellement existant), et
  • Le contenu GridView normale composé de l'en-tête et les données

techniques similaires applicables à ListBox, etc., à l'exception du Le modèle ScrollViewer est plus simple car il n'a pas besoin de traiter les lignes d'en-tête.

Si vous expliquez la disposition exacte que vous voulez lorsque le défilement est activé (une image serait bien), je peux vous donner une meilleure réponse. Cela pourrait aussi aider à voir votre XAML existant.

+0

J'ai mal lu la question. Votre réponse est bien meilleure que la mienne. Merci. – Zamboni

Questions connexes