2016-09-27 2 views
0

J'ai essayé de faire un seul clic d'édition pour un DataGrid WPF et j'ai regardé beaucoup de solutions sur stackoverflow mais j'ai un cas d'utilisation supplémentaire qui n'a pas été résolu. J'ai besoin de configurer un déclencheur de style, mais j'en ai besoin pour ne pas simplement définir IsEditing sur true tout le temps. J'en ai besoin basé sur une deuxième condition. Le problème que je rencontre est que cela ne fonctionne qu'une fois par cellule.WPF DataGridCell Style Trigger basé sur IsSelected ne fonctionne qu'une fois

Voici le XAML qui fonctionne presque. Le problème avec ceci est qu'il ne fonctionne qu'une seule fois par cellule. Maintenant, si je change la première condition à être basée sur IsFocused cela fonctionne tout le temps. Le problème avec cela est alors je ne peux pas cliquer dans la zone de texte dans la cellule pour des raisons évidentes. Je ne sais vraiment pas pourquoi IsSelected ne fonctionne qu'une seule fois par cellule. Par ailleurs, si je retire la vue du mode édition et la remets en utilisant un bouton qui est également sur la vue, cela fonctionnera à nouveau ... une fois pour chaque cellule.

Quelqu'un at-il un aperçu de la raison pour laquelle ce comportement étrange se produit?

Répondre

0

Ok. Je ne comprends pas pourquoi IsSelected ne fonctionne pas, mais j'ai trouvé une propriété qui fonctionne et permettez-moi de taper dans la zone de texte dans la cellule. L'astuce consistait à utiliser la propriété IsKeyboardFocusWithin. Voici la solution complète qui fonctionne comme prévu:

<DataGrid.CellStyle> 
    <Style TargetType="DataGridCell" BasedOn="{StaticResource {x:Type DataGridCell}}"> 
     <Style.Triggers> 
     <MultiDataTrigger> 
      <MultiDataTrigger.Conditions> 
       <Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsKeyboardFocusWithin}" Value="True" /> 
       <Condition Binding="{Binding RelativeSource={RelativeSource AncestorType=DataGrid}, Path=DataContext.IsEditing}" Value="True" /> 
      </MultiDataTrigger.Conditions> 
      <Setter Property="IsEditing" Value="true" /> 
     </MultiDataTrigger> 
     </Style.Triggers> 
    </Style> 
</DataGrid.CellStyle>