2017-09-10 2 views
0

Je suis nouveau à C# et WPF essayant d'obtenir ce que je devrais penser est une chose simple, mais cela ne fonctionne pas.Pourquoi mon DataGrid disparaît-il de l'écran quelle que soit la solution que j'essaie?

J'ai une grille de données remplie par SQL, et peu importe ce que j'essaie, je ne peux pas obtenir le Height du DataGrid pour rester dans la fenêtre. Ça descend toujours. Je veux que ce soit dynamique à la taille de la fenêtre.

Mon code très simple est ci-dessous, ou au moins cette itération la plus récente.

<Page x:Class="TMSMaintenance.PaymentError" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:local="clr-namespace:TMSMaintenance" 
     Title="PaymentError"> 

    <!--<DataGrid Name="MydataGrid" CanUserAddRows="False" SelectionMode="Single" />--> 

     <Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="1*"/>    
     </Grid.RowDefinitions> 

     <DockPanel Grid.Row="0" VerticalAlignment="Stretch" > 

      <DataGrid x:Name="MydataGrid" 
         VerticalAlignment="Stretch" 
         MinHeight="100" 
         VerticalScrollBarVisibility="Auto" VerticalContentAlignment="Stretch">      
      </DataGrid>    
     </DockPanel>   
    </Grid>   
</Page> 

J'ai essayé d'envelopper dans un ScrollView - cela n'a pas fonctionné. J'ai essayé de définir le Height en le liant à la fenêtre - cela n'a pas fonctionné. J'ai essayé le Grid.RowDefinition Height = "*" et le "1*" - cela n'a pas fonctionné. VerticalAlignment = "Stretch" n'a également pas fonctionné.

Alors, qu'est-ce qui me manque? Edit: Peut-être que je devrais aussi dire que c'est sur un fichier Page appelé dans une balise de trame. Je ne sais pas si cela fait une différence ici.

<StackPanel CanVerticallyScroll="True" CanHorizontallyScroll="True"> 
     <!-- Navigation --> 
     <StackPanel Orientation="Horizontal" Margin="0,10,0,0"> 
      <Button Content="Files Lookup" Margin="0,0,10,0"/> 
      <Button Content="Payment Error" Margin="0,0,10,0"/> 
      <Button Content="Carrier Maintenance" Margin="0,0,10,0"/> 
      <Button Content="Payment File" Margin="0,0,10,0" /> 
     </StackPanel> 
     <ScrollViewer> 
      <Frame x:Name="MainFrame" NavigationUIVisibility="Hidden" ></Frame> 
     </ScrollViewer>    
    </StackPanel> 
+0

Tout ce que vous mettez dans un StackPanel (vertical) n'est pas redimensionné verticalement. Le StackPanel s'étend juste aussi loin que ses éléments enfants l'exigent. Mettez votre cadre dans une grille ou DockPanel. En outre, la définition des propriétés CanVerticallyScroll et CanHorizontallyScroll de StackPanel n'a aucun effet. Lisez les remarques sur leurs pages de documentation respectives. – Clemens

+0

J'ai modifié votre question. Tout d'abord, j'ai supprimé les balises forcées du titre - voir [ici] (https://stackoverflow.com/help/tagging) pourquoi. Ensuite, j'ai changé votre code d'exemple pour être * minimal * (voir [mcve]). Vos échantillons ne doivent contenir aucun code qui ne soit pas pertinent pour les choses que vous posez. – dymanoid

+0

Merci pour l'info @Clemens J'avais lu que moi-même tout en explorant les options, ma grille de données n'est pas dans un panneau de pile mais je ne crois pas que ce serait le problème. J'ai essayé une version de ce code où j'ai enlevé le stackpanel et tout son contenu et cela n'a fait aucune différence. –

Répondre

1

se débarrasser de cette DockPanel. Grid est un conteneur beaucoup plus flexible pour les contrôles et vous n'avez pas besoin d'emballer le conteneur dans le conteneur. Cela seul devrait faire l'affaire.

Une bonne pratique est de ne pas utiliser DockPanels du tout. Jamais. Tout ce que vous pouvez atteindre avec DockPanels peut être atteint avec Grids (avec un peu plus de codage, mais cela vous donne une solution plus flexible et une meilleure maintenabilité de votre code).

Débarrassez-vous également de VerticalContentAlignment (inutile au cas où vous l'avez décrit) et vous n'avez pas besoin de définir VerticalAlignment (ni HorizontalAlignment) pour Étirer, puisqu'il s'agit d'une valeur par défaut de cette propriété.

EDIT: Je n'ai pas remarqué le deuxième échantillon de votre code. Tout ce que j'ai écrit avant s'applique toujours et améliorera votre code, mais je pense que votre problème est d'imbriquer votre Page dans votre conteneur principal (Window ou quoi que ce soit).

Essayez de remplacer:

<StackPanel CanVerticallyScroll="True" CanHorizontallyScroll="True"> 
     <!-- Navigation --> 
     <StackPanel Orientation="Horizontal" Margin="0,10,0,0"> 
      <Button Content="Files Lookup" Margin="0,0,10,0"/> 
      <Button Content="Payment Error" Margin="0,0,10,0"/> 
      <Button Content="Carrier Maintenance" Margin="0,0,10,0"/> 
      <Button Content="Payment File" Margin="0,0,10,0" /> 
     </StackPanel> 
     <ScrollViewer> 
      <Frame x:Name="MainFrame" NavigationUIVisibility="Hidden" ></Frame> 
     </ScrollViewer>    
    </StackPanel> 

Pour:

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="auto" /> 
     <RowDefinition Height="*" /> 
    </Grid.RowDefinitions> 

    <StackPanel Grid.Row="0" 
       Orientation="Horizontal" 
       Margin="0,10,0,0"> 
     <StackPanel.Resources> 
      <Style TargetType="{x:Type Button}"> 
       <Setter Property="Margin" Value="0,0,10,0" /> 
      </Style> 
     </StackPanel.Resources> 

     <Button Content="Files Lookup"/> 
     <Button Content="Payment Error"/> 
     <Button Content="Carrier Maintenance"/> 
     <Button Content="Payment File"/> 
    </StackPanel> 

    <Frame x:Name="MainFrame" 
      Grid.Row="1" 
      NavigationUIVisibility="Hidden" /> 
</Grid> 

J'ai également simplifié votre style sur Buttons et je vous recommande de changer votre Page-UserControl.

+0

Je vais essayer quand j'aurai une chance aujourd'hui et je vous dirai comment ça se passe. J'avais soupçonné que cela pourrait être du cadre. merci pour les pointeurs. –

+0

Cela a fonctionné, merci pour la perspicacité et les suggestions, j'apprends WPF donc c'est bon d'apprendre quelques bonnes pratiques. –

+0

Je suis heureux d'avoir pu aider :) –