2009-03-21 7 views
2

Je travaille avec le DataGrid WPF du WPFToolkit et je vais avoir des problèmes avec essayer pour agrandir l'ensemble DataGrid. Ma première pensée était que ça allait être facile et je voudrais simplement appliquer une échelle de transformation à la grille et animer les ScaleX, scaleY lorsque l'on utilise un bouton cliqué. Cela n'a toutefois pas fonctionné car la barre de défilement a été agrandie pour l'agrandir. J'ai besoin en-têtes fixes et des colonnes fixes sur la grille de données, donc je ne peux pas simplement utiliser un ScrollViewer à l'extérieur de la grille de données pour gérer le défilement. La deuxième chose que j'ai essayé était à l'échelle juste la taille de la police dans la grille, mais cela a échoué en raison de la diminution de la taille de la police les colonnes restent à la largeur d'origine et ne rétrécissent pas.WPF DataGrid zoom question

Enfin, je pensais que je l'avais travail en utilisant le code ci-dessous qui va dans l'arborescence de vue pour le DataGrid et ajoute une échelle de transformation du Présentateur Contenu de défilement. (Ne figure pas non plus dans ce code, j'applique une transformation à l'élément de l'arborescence visuelle pour les en-têtes de la même manière afin qu'elle soit également mise à l'échelle). Je pensais que cela fonctionnait bien jusqu'à ce que j'ai testé le défilement horizontal après le zoom. (Travaux défilement vertical parfaitement.) Avant le zoom à tout le défilement horizontal est très bien, mais après le zoom, quand je défiler horzonitally l'affichage disjoncte. Il est difficile de dire exactement ce qu'il fait, mais il semble que le contenu qui défile sur la gauche de l'écran est "se replier" et revenir à gauche. Peut-être que tout est juste en train de s'écraser sur le côté gauche. Est-ce que quelqu'un a des idées sur comment je peux faire fonctionner cela, j'espère sans jeter toute ma grille de données qui fonctionne déjà très bien autrement.

ScrollContentPresenter sp = (ScrollContentPresenter) 
VisualTreeHelper.GetChild(
VisualTreeHelper.GetChild(
VisualTreeHelper.GetChild(VisualTreeHelper.GetChild(dgMatrix,  0), 0), 0),2); 
ScaleTransform st = new ScaleTransform(1, 1); 
sp.LayoutTransform = st; 
DoubleAnimation a = new DoubleAnimation(); 
a.By = 1.5; 
a.AutoReverse = false; 
a.Duration = new Duration(TimeSpan.Parse("0:0:0.25")); 
st.BeginAnimation(ScaleTransform.ScaleXProperty, a); 
st.BeginAnimation(ScaleTransform.ScaleYProperty, a); 
+0

J'ai trouvé une solution faisable et signalerai quand je reçois un chance. –

+0

Serait bien de voir la solution ... Je cours dans le même problème. – KrisTrip

Répondre

0

J'ai trouvé une solution. Je ne sais pas si cela est la même manière que vous l'avez fait ou non:

<toolkit:DataGrid.CellStyle> 
    <Style TargetType="{x:Type toolkit:DataGridCell}"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type toolkit:DataGridCell}"> 
        <ContentPresenter> 
         <ContentPresenter.LayoutTransform> 
          <ScaleTransform ScaleX="{Binding Path=Value, ElementName=ZoomFactor}" 
              ScaleY="{Binding Path=Value, ElementName=ZoomFactor}" /> 
         </ContentPresenter.LayoutTransform> 
        </ContentPresenter> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
</toolkit:DataGrid.CellStyle> 

Où ZOOMFACTOR est un curseur:

<Slider x:Name="ZoomFactor" 
     Value="1" 
     Minimum=".25" 
     Maximum="5" 
     Width="180" Margin="0,0,5,0"/> 
+0

Le seul problème que je n'ai pas encore compris est qu'une fois que vous zoomez, les colonnes ne sont pas redimensionnées après un zoom arrière ou un zoom arrière. – KrisTrip