2017-10-16 5 views
1

Je souhaite ajouter un style au DataGridCell d'un DataGrid personnalisé qui est basé sur la propriété de ce DataGrid. Par exemple je veux avoir un DependencyProperty nommé VisualizeReadOnlyCells et si cette propriété est définie sur True, je veux le DataGridCell qui est ReadOnly est dessiné avec un fond gris. Et d'autres choses similaires. Comme une solution de contournement j'ai créé deux styles différents pour le DataGridCell et j'assigne ces styles à la propriété CellStyle de la DataGrid dans la définition de style DataGrid. Mais avec plus de propriétés, le nombre de ces styles va augmenter et le code sera très ingérable.Style DataGridCell basé sur la propriété DataGrid

Ma solution actuelle est:

<Style x:Key="DataGridCellNoVisualize" TargetType="DataGridCell"> 
    - style definition 
</Style> 

<Style x:Key="DataGridCellVisualize" TargetType="DataGridCell"> 
    <Style.Triggers> 
     <Trigger Property="IsReadOnly" Value="True"> 
      <Setter Property="Background" Value="Gray"/> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

<Style x:Key="DataGridStyle" TargetType="MyCustomDataGrid"> 
    <Setter Property="CellStyle" Value="{StaticResource DataGridCellNoVisualize"/> 
    <Style.Triggers> 
     <Trigger Property="VisualizeReadOnlyCells" Value="True"> 
      <Setter Property="CellStyle" Value="{Static Resource DataGridCellVisualize"/> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

Ce que je voudrais faire est quelque chose comme ceci:

<Style x:Key="DataGridCellUniversalStyle" TargetType="DataGridCell"> 
    - style definition 
    <Style.Triggers> 
     <MultiTrigger> 
      <MultiTrigger.Conditions> 
       <Condition Property="IsReadOnly" Value="True"/> 
       <Condition Property="MyParentDataGrid.VisualizeReadOnlyCells" Value="True"/> 
      </MultiTrigger.Conditions> 
      <MultiTrigger.Setters> 
       <Setter Property="Background" Value="Gray"/> 
      </MultiTrigger.Setters> 
     </MultiTrigger> 
    </Style.Triggers> 
</Style> 

Répondre

0

Si je comprends bien votre question, vous pouvez utiliser un MultiDataTrigger et se lier à la DataGridCell et le parent DataGrid:

<Style x:Key="DataGridCellUniversalStyle" TargetType="DataGridCell"> 
    <Style.Triggers> 
     <MultiDataTrigger> 
      <MultiDataTrigger.Conditions> 
       <Condition Binding="{Binding IsReadOnly, RelativeSource={RelativeSource Self}}" Value="True"/> 
       <Condition Binding="{Binding VisualizeReadOnlyCells, RelativeSource={RelativeSource AncestorType=local:MyCustomDataGrid}}" Value="True"/> 
      </MultiDataTrigger.Conditions> 
      <MultiDataTrigger.Setters> 
       <Setter Property="Background" Value="Gray"/> 
      </MultiDataTrigger.Setters> 
     </MultiDataTrigger> 
    </Style.Triggers> 
</Style> 
+0

si simple? Merci. – merlin