2010-05-11 5 views
0

J'ai défini ce qui suit dans mon contrôle:ScrollViewer dans un ListBox ne fonctionne pas. WPF

<Style TargetType="primitives:CalendarDayButton" x:Key="EventCalendarDayButton"> 
     <Setter Property="Background" Value="#FFBADDE9"/> 
     <Setter Property="MinWidth" Value="5"/> 
     <Setter Property="MinHeight" Value="5"/> 
     <Setter Property="FontSize"> 
      <Setter.Value> 
       <Binding Path="DayFontSize"> 
        <Binding.RelativeSource> 
         <RelativeSource Mode="FindAncestor" AncestorType="{x:Type toolkit:Calendar}" /> 
        </Binding.RelativeSource> 
       </Binding> 
      </Setter.Value> 
     </Setter> 
     <Setter Property="HorizontalContentAlignment" Value="Right"/> 
     <Setter Property="VerticalContentAlignment" Value="Top"/> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="primitives:CalendarDayButton"> 
        <Grid MouseDown="Grid_MouseDown"> 
         <Grid.RowDefinitions> 
          <RowDefinition Height="18" /> 
          <RowDefinition Height="*" /> 
         </Grid.RowDefinitions>       
         <Rectangle x:Name="SelectedBackground" Grid.Row="1" RadiusX="1" RadiusY="1" Opacity="0" Fill="{TemplateBinding Background}"/> 
         <Rectangle x:Name="Background" Grid.Row="1" RadiusX="1" RadiusY="1" Opacity="0" Fill="{TemplateBinding Background}" /> 
         <Rectangle x:Name="InactiveBackground" Grid.Row="1" RadiusX="1" RadiusY="1" Opacity="0" Fill="#FFA5BFE1"/> 
         <Border> 
          <Border.Background> 
           <LinearGradientBrush StartPoint="0,0" EndPoint="0,1"> 
            <GradientStop x:Name="StartGradient" Color="#FFD5E2F2" Offset="0"/> 
            <GradientStop x:Name="EndGradient" Color="#FFB9C9DD" Offset="1"/> 
           </LinearGradientBrush> 
          </Border.Background> 
          <ContentPresenter x:Name="NormalText" Margin="5,1,5,1" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"> 
           <TextElement.Foreground> 
            <SolidColorBrush x:Name="selectedText" Color="#FF333333" /> 
           </TextElement.Foreground> 
          </ContentPresenter> 
         </Border> 
         <Rectangle x:Name="Border" StrokeThickness="0.5" Grid.RowSpan="2" SnapsToDevicePixels="True"> 
          <Rectangle.Stroke> 
           <SolidColorBrush x:Name="BorderBrush" Color="#FF5D8CC9"/> 
          </Rectangle.Stroke> 
         </Rectangle> 
         <Path x:Name="Blackout" Grid.Row="1" Opacity="0" Margin="3" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" RenderTransformOrigin="0.5,0.5" Fill="#FF000000" Stretch="Fill" Data="M8.1772461,11.029181 L10.433105,11.029181 L11.700684,12.801641 L12.973633,11.029181 L15.191895,11.029181 L12.844727,13.999395 L15.21875,17.060919 L12.962891,17.060919 L11.673828,15.256231 L10.352539,17.060919 L8.1396484,17.060919 L10.519043,14.042364 z"/> 
         <Rectangle Width="0" x:Name="DayButtonFocusVisual" Grid.Row="1" Visibility="Collapsed" IsHitTestVisible="false" RadiusX="1" RadiusY="1" Stroke="#FF45D6FA"/>        
         <Button x:Name="ActivateDayViewOnDay" Grid.Row="0" Opacity="0.3" Height="15" Margin="1,1,1,1" PreviewMouseLeftButtonDown="DayView_Click" />       
         <ScrollViewer Grid.Row="1" > 
          <ScrollViewer.Content>       
          <local:TestListBox 
          x:Name="eventsLbx" 
          Background="Transparent" 
          BorderBrush="Transparent" 
          > 
          <local:TestListBox.ItemsSource> 
           <MultiBinding Converter="{StaticResource calendarEventsConverter}"> 
            <Binding RelativeSource="{RelativeSource Mode=FindAncestor, AncestorType={x:Type local:EventCalendar}}" Path="CalendarEvents"/> 
            <Binding RelativeSource="{RelativeSource Mode=Self}" Path="DataContext"/> 
           </MultiBinding> 
          </local:TestListBox.ItemsSource> 
          <local:TestListBox.ItemTemplate> 
           <DataTemplate>        
             <TextBlock TextTrimming="CharacterEllipsis" HorizontalAlignment="Center" FontSize="12" Text="{Binding Text}" />        
           </DataTemplate> 
          </local:TestListBox.ItemTemplate> 
         </local:TestListBox> 
          </ScrollViewer.Content> 
         </ScrollViewer> 
        </Grid>        
        <ControlTemplate.Triggers> 
         <Trigger SourceName="eventsLbx" Property="HasItems" Value="False"> 
          <Setter TargetName="eventsLbx" Property="Visibility" Value="Hidden"/> 
         </Trigger> 
        </ControlTemplate.Triggers> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

Maintenant, s'il y a plus d'éléments que sont visibles, le ScrollViewer apparaît correctement, mais l'utilisateur ne peut pas faire glisser le bouton du milieu de ScrollViewer pour le défilement.

L'utilisateur peut cliquer sur les flèches à la fin du scrollviewer pour faire défiler mais il ne peut pas cliquer sur la barre qui apparaît sur la barre de défilement et le faire glisser pour réellement faire défiler le contenu.

Je ne peux pas comprendre pourquoi ce qui se passe ...

+0

S'il vous plaît modifier votre code affiché, de sorte que tout est affiché. Il semble que les premières lignes ont été "avalées". Très probablement parce que votre indentation n'était pas correcte. – gehho

Répondre

1

Si vous voulez faire défiler les éléments dans votre ListBox, vous n'avez pas besoin de l'envelopper dans un ScrollViewer. Le ListBox supporte nativement le défilement. Cela signifie que si votre ListBox est trop petit pour afficher tous ses éléments, il ajoute automatiquement ScrollBar sur le côté.

+0

Ive l'a essayé sans ajouter la barre de défilement ... il ne se comporte toujours pas correctement ... Je ne peux pas faire glisser la barre pour faire défiler les éléments. – guest

+0

Alors, comment restreignez-vous la taille de la ListBox? Définissez-vous des propriétés Largeur et Hauteur fixes? L'utilisez-vous dans une grille ou dans un StackPanel? Veuillez mettre à jour votre code ci-dessus, afin que tout soit visible et pas complètement foiré. Veuillez également inclure les éléments environnants (le panneau dans lequel la ListBox est incorporée). – gehho

+0

Salut gehho, Merci d'être patient, je viens d'éditer mon post pour inclure le style entier. Je suis fondamentalement en utilisant le contrôle de calendrier wpf de Microsoft et en le modifiant http://msdn.microsoft.com/en-us/magazine/dd882520.aspx – guest

0

Votre ScrollViewer et ListBox sont dans une grille, et vous avez du code derrière l'événement MouseDown de cette grille.

<Grid MouseDown="Grid_MouseDown"> 

Quelque chose que vous faites dans cette méthode peut être de prendre le chemin des mécanismes de souris du bouillonnement de l'événement ScrollViewer, perturbant ou quelque chose comme ça.

Vérifiez votre code-behind ou le poster ici afin que nous puissions vous aider avec elle :)

+0

Oups, viens de réaliser quel âge cette question est ... lol – almulo

Questions connexes