De contrôle de l'utilisateur à l'intérieur de ScrollViewer ne pas faire défiler dans WPF
J'ai le code suivant (en abrégé) dans ma fenêtre principale:
Bien que j'ai mis les deux barre de défilement de la visibilité et de CanContentScroll
propriétés qu'il n'a pas de défilement. Je suppose qu'il a à faire avec mon contrôle de l'utilisateur.
<Window>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TabControl Grid.Column="0" Grid.Row="0" HorizontalAlignment="Stretch" Margin="0" VerticalAlignment="Stretch" Height="Auto" Width="Auto">
<TabItem Header="TEST">
<ScrollViewer HorizontalScrollBarVisibility="Visible" VerticalScrollBarVisibility="Visible" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch">
<my:MY_USER_CONTROL x:Name="myUserControl" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" ScrollViewer.CanContentScroll="True" />
</ScrollViewer>
</TabItem>
</TabControl>
<Button Grid.Column="0" Grid.Row="2" >a button</Button>
<WrapPanel Grid.Column="0" Grid.Row="3" >
</WrapPanel>
</Grid>
</Window>
Abrégée de la structure de mon contrôle de l'utilisateur:
<UserControl>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="183*" />
<ColumnDefinition Width="117*" />
</Grid.ColumnDefinitions>
<TreeView ItemsSource="{Binding Children}" Grid.ColumnSpan="2">
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}" />
<Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" />
<Setter Property="FontWeight" Value="Normal" />
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="FontWeight" Value="Bold" />
</Trigger>
</Style.Triggers>
</Style>
</TreeView.ItemContainerStyle>
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Children}" >
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<Grid.Children>
<TextBlock Background="LightGray" Padding="2" Margin="2" Grid.Row="0" Grid.Column="0" Text="{Binding Name}" />
<TextBlock Padding="2" Margin="2" Grid.Row="0" Grid.Column="1" Text="{Binding Content}" />
</Grid.Children>
</Grid>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
</Grid>
</UserControl>
OriginalL'auteur Onur | 2013-02-28
Vous devez vous connecter pour publier un commentaire.
Vous devez configurer la comme ceci. J'ai changé le RowDefinition pour Row0 à Height="*" Donc il va utiliser tout l'espace qu'il peut. Puis ont changé de place entre le ScrollViewer et le TabControl. Ainsi, le TabControl est un contenu du ScrollViewer.
Height
pour laScrollViewer
. Mais le réglage de laScrollViewer
hauteur n'est pas ce que je veux.Essayez de changer votre RowDefinition pour Row0; <RowDefinition Height="*" />
Qui a fait le tour! Poster une réponse et je vais l'accepter.
Fait. Heureux, il a travaillé. J'ai du mal avec le scrollviewer aswell récemment.
Il fonctionne également si le
ScrollViewer
est à l'intérieur de laTabItem
comme dans ma version d'origine. Le seul point est de ne pas permettre laScrollViewer
d'utiliser autant d'espace qu'il veut (comme ce fut le cas par les paramètres de hauteur de l'auto)OriginalL'auteur hijack
Lorsque vous définissez CanContentScroll à Vrai, le ScrollViewer suppose que votre contenu implémente IScrollInfo (qui je suppose ne marche pas).
Essayez de définir CanContentScroll sur le ScrollViewer à faux, cela permet au contenu d'utiliser autant d'espace qu'il veut et le ScrollViewer prend soin de défilement.
Toutefois, selon la taille, le nombre de visuels etc. de votre contrôle, cela peut devenir un problème de performance (par exemple, pas d'INTERFACE utilisateur Virtualisation lorsqu' CanContentScroll est fixé à Faux).
CanContentScroll
àfalse
n'a pas aidé. Je suppose que maintenant la raison en est que laScrollViewer
lui-même pense qu'il peut utiliser de l'espace illimité et donc n'a pas besoin de faire défiler le contenu, car il s'inscrit dans l'illimité de grandesScrollViewer
. C'est parce que les paramètres de laScrollViewer
à une Hauteur/Largeur permet le défilement. Mais je ne veux pas limiter la taille de laScollViewer
qui doit utiliser tout l'espace disponible.OriginalL'auteur Joachim Kerschbaumer
Ressemble le contenu à l'intérieur de votre scrollviewer est de la même taille que le spectateur, donc il n'y a rien à faire défiler?
si vous faites quelque chose comme
Ensuite, la grille est la même taille que le défilement de la visionneuse et ne permettra jamais de défilement, si vous réglez la hauteur de la grille de plus que le spectateur peut s'afficher, vous aurez une barre de défilement.
<my:MY_USER_CONTROL>
hauteur à une valeur fixe n'a pas vraiment aider. Le contrôle a maintenant une hauteur fixe, mais il ne peut pas faire défiler. Réglage de laScrollViewer
hauteur à une valeur fixe autorisé le contenu défile mais je voudrais vraiment leScrollViewer
de prendre tout l'espace disponible.OriginalL'auteur Andy