2010-10-24 11 views
0

J'ai un DataGrid personnalisé mélangé avec DataGridTemplateColumns et un comportement personnalisé dérivé de cette réponse Silverlight Datagrid: Highlight an entire column when that column is sorted. Le problème que je rencontre est que les cellules de DataGridTemplateColumn ne détectent pas le 'highlight'. Le modèle de cellule utilisé pour les colonnes personnalisées a la structure indiquée ci-dessous. Quelqu'un a-t-il des idées pour lesquelles le surlignage en arrière-plan n'est pas appliqué? Je me suis cassé la cervelle sur celui-ci pendant un moment.Silverlight Datagrid: Définition de l'arrière-plan d'une cellule de modèle avec un comportement personnalisé

<DataTemplate> 
    <Grid> 
     <Border VerticalAlignment='Stretch' Margin='1' Background='Transparent'> 
      <TextBlock VerticalAlignment='Center' Text='{Binding Path=Variable}' /> 
     </Border> 
    </Grid> 
</DataTemplate> 

Répondre

0

Pour résoudre ce problème, je fini par avoir besoin de créer un string DependencyProperty appelé Background sur la classe de colonne personnalisée qui hérite de DataGridTemplateColumn. Aussi, dans le comportement, j'ai dû vérifier de quel type était la colonne.

Auparavant, je présenterais simplement la colonne dans le gestionnaire d'événements CollectionChanged à DataGridBoundColumn. Maintenant je vérifie pour voir si c'est réellement ce type ou si c'est un DataGridTemplateColumn. Le DataGridTemplateColumn a une façon différente de vérifier le chemin de liaison, la différence est indiqué ci-dessous

DataGridBoundColumn: boundColumn.Binding.Path.Path DataGridTemplateColumn: boundColumn.SortMemberPath

Le tweak finale que je devais faire était de changer la structure du DataTemplate afin qu'il ressemble maintenant à ci-dessous, en mettant fondamentalement la couleur d'une manière différente est tout.

<DataTemplate> 
    <Grid> 
     <Border> 
      <Border.Background> 
       <SolidColorBrush Color='{0}' /> 
      </Border.Background> 
      <TextBlock VerticalAlignment='Center' Text='{Binding Path=Variable}' /> 
     </Border> 
    </Grid> 
</DataTemplate>