2009-09-17 6 views
0

J'ai une barre de défilement dans wpf autour d'un ItemsControl, qui n'est visible que lorsque la liste est plus longue que la taille de la fenêtre. Cependant, quand il est caché, il y a un espace blanc vide où la barre de défilement devrait être. Comment puis-je supprimer cet espace et "réduire" la barre de défilement à la place?Comment faire pour étendre le contenu de la fenêtre lorsque la barre de défilement n'est pas visible dans wpf?

<ScrollViewer VerticalScrollBarVisibility="Auto" 
       HorizontalAlignment="Stretch" 
       HorizontalContentAlignment="Left" 
       VerticalContentAlignment="Top" 
       HorizontalScrollBarVisibility="Disabled"> 
    <ItemsControl ItemsSource="{Binding Path=ContactGroups}" 
        Width="Auto" 
        MinWidth="231" 
        MinHeight="342" 
        ScrollViewer.VerticalScrollBarVisibility="Disabled" 
        Height="Auto" 
        HorizontalContentAlignment="Left" 
        VerticalContentAlignment="Top" 
        HorizontalAlignment="Stretch"> 
     <ItemsControl.ItemTemplate> 
      <DataTemplate> 
       <c:ContactGroupControl /> 
      </DataTemplate> 
     </ItemsControl.ItemTemplate> 
    </ItemsControl> 
</ScrollViewer> 
+0

Impossible de reproduire. Pouvez-vous poster une capture d'écran? –

Répondre

0

Vous avez déjà trouvé la réponse à votre question.

Vous devez définir l'état de la barre de défilement à Collapsed plutôt que Invisible:

scrollbar.Visibility = Collapsed; 

Cela supprime l'élément plutôt que cacher et en réservant l'espace pour elle dans l'interface utilisateur.

+0

quel gestionnaire puis-je utiliser pour régler ceci? Actuellement WPF le gère pour moi puisque je mets VerticalScrollBarVisibility = "Auto" ... Y at-il un événement OnScrollBarVisibilityChanged ou similaire? – bluebit

1

Aucun événement n'est déclenché lorsque la visibilité de la barre de défilement est modifiée, mais il se peut que vous puissiez vous connecter aux notifications de modification des propriétés de dépendance VerticalScrollBarVisibility et/ou HorizontalScrollBarVisibility. Peut-être pourriez-vous utiliser ce petit extrait.

DependencyPropertyDescriptor scrollbarDesc = 
    DependencyPropertyDescriptor.FromProperty 
    (ScrollViewer.VerticalScrollBarVisibilityProperty, typeof(Visibility)); 

if (scrollbarDesc != null) 
{ 
    scrollbarDesc.AddValueChanged(scrollViewer1, delegate 
    { 
     // Add your propery changed logic here... 
    }); 
} 
+0

Merci l'homme! Cela semble définitivement prometteur. Je reçois une exception lorsque je lance la chose sur la première ligne que vous avez collée: ArgumentException: le type 'Visibility' n'a pas de DependencyObjectType correspondant. – bluebit

+0

J'ai essayé de changer la visibilité de ScrollBarVisibility, ce qui est en fait, mais toujours la même erreur .... – bluebit

1

Trainee4Life a l'idée, mais vous avez juste besoin de brancher dans une autre propriété [ScrollViewer.ComputedVerticalScrollBarVisibilityProperty] et changer le typeof (Visisbility) à typeof (ScrollViewer).

DependencyPropertyDescriptor scrollbarDesc = 
    DependencyPropertyDescriptor.FromProperty 
    (ScrollViewer.ComputedVerticalScrollBarVisibilityProperty, typeof(ScrollViewer)); 

if (scrollbarDesc != null) 
{ 
    scrollbarDesc.AddValueChanged(scrollViewer1, delegate 
    { 
     // Add your propery changed logic here... 
    }); 
}