2010-06-18 10 views
4

Pourquoi le ComboBox de cette colonne n'est-il visible que par double-clic dans la cellule vide lorsque le DataGrid est défini sur IsReadOnly = FALSE ???WPF DataGridComboBoxColumn ComboBox n'est visible que lorsque DataGrid a IsReadOnly = FALSE

<DataGridComboBoxColumn Width="*" IsReadOnly="False" Header="test" /> 

en utilisant un DataTemplateColumn fonctionne comme toujours ... ce qui est mal à cela DataGridComboBoxColumn?

œuvres:

<DataGridTemplateColumn Header="Schoolclass"> 
       <DataGridTemplateColumn.CellTemplate> 
        <DataTemplate> 
         <ComboBox Background="Blue" /> 
        </DataTemplate> 
       </DataGridTemplateColumn.CellTemplate> 
      </DataGridTemplateColumn> 

Répondre

9

Tous les BUILTIN DataGridColumns ont deux styles. Un pour quand la cellule n'est pas en mode d'édition et l'autre où la cellule est en mode d'édition. Habituellement, le mode non-édition affiche simplement un bloc de texte, pas le contrôle réel que vous pourriez attendre (ComboBox, TextBox, etc). Et une fois que vous commencez à modifier la cellule, le bloc de texte est remplacé par le contrôle approprié. Si la grille de données est définie sur IsReadOnly = true, cela signifie que les cellules ne passent jamais en mode d'édition et que c'est le comportement que vous voyez. Lors de la création d'un DataGridTemplateColumn, vous remplacez essentiellement toute la logique de grille de données intégrée. Par exemple, si vous souhaitez que votre colonne modèle soit en lecture seule lorsque la grille de données est en lecture seule, vous devez lier manuellement les deux valeurs. Et si vous vouliez obtenir le même comportement que les colonnes intégrées (bloc de texte lorsque la cellule n'est pas en mode édition), vous devrez utiliser des déclencheurs pour fournir les modèles de contrôle appropriés. Notez également que si vous utilisez une colonne intégrée (par exemple DataGridCheckBoxColumn) et que vous utilisez un ElmentStyle (par exemple pour centrer les checkBox), les cellules de la colonne sont toutes éditables malgré la valeur de dataagrid définie sur IsReadOnly = true . Cela se produit parce que lorsque vous spécifiez un ElmentStyle, vous remplacez le style intégré, qui contient la logique pour rendre les cases à cocher en lecture seule lorsque la grille de données est en lecture seule.

+0

déjà trouvé que sur ;-) Mais bon résumé :) – msfanboy