2010-11-15 26 views
7

J'ai une grille de données qui affiche des éléments avec deux colonnes de données de ligne de texte et un plus grand détail de texte libre que j'affiche via un modèle rowdetails avec juste une bordure et un bloc de texte. Le problème que j'ai est que les détails du texte sont souvent plus grands que la zone autorisée pour la grille. Le comportement de défilement par défaut de la grille de données signifie que les utilisateurs ne peuvent pas afficher l'intégralité du détail lorsque le défilement passe à l'élément suivant. Si je résoudre ce problème en utilisantMéthode pour autoriser le défilement du contenu RowDetail dans WPF DataGrid

ScrollViewer.CanContentScroll="False" 

alors le DataGrid devient unusably lent avec un nombre important de lignes que la virtualisation est désactivée. Je pensais que je pourrais contourner cela en enveloppant le rowdetail dans un scrollviewer, mais cela ne fonctionne pas car la zone de détail n'est pas limitée à la zone de rendu.

Donc, quelqu'un peut-il offrir des options utilisables? Ma connaissance de WPF est assez minime, donc excuses s'il y a une manière évidente de résoudre ceci.

Edit: RowDetailsTemplate

<DataGrid.RowDetailsTemplate> 
    <DataTemplate > 
     <Border Background="Gray" 
       Padding="5,5,5,5" CornerRadius="5"> 
      <TextBlock Background="Transparent" 
         Foreground="White" 
         TextWrapping="Wrap" 
         Text="{Binding Text}"/> 
     </Border> 
    </DataTemplate> 
</DataGrid.RowDetailsTemplate> 
+0

Poster un exemple de code de votre RowDetailsTemplate –

Répondre

7

Une façon d'ajouter un ScrollViewer pour RowDetails est en spécifiant un MaxHeight pour les RowDetails comme celui-ci

<DataGrid ...> 
    <DataGrid.RowDetailsTemplate> 
     <DataTemplate> 
      <Grid MaxHeight="75"> 
       <ScrollViewer> 
        <Border HorizontalAlignment="Stretch" CornerRadius="5" Background="Black" Margin="5" Padding="5"> 
         <TextBlock Text="{Binding RowDetails}" Foreground="#509CD5" FontSize="20" Width="300" TextWrapping="Wrap"/> 
        </Border> 
       </ScrollViewer> 
      </Grid>      
     </DataTemplate> 
    </DataGrid.RowDetailsTemplate> 
    <DataGrid.Columns> 
    <!-- ... --> 
</DataGrid> 
+0

Merci. Ce n'est pas tout à fait ce que je veux car le contrôle avec la grille est redimensionnable et l'élément de détail se déplacera, mais je me demande si je peux frapper quelque chose dans le code de la vue pour le mettre en marche. – mwtb