2017-10-16 96 views
1

我想向基於DataGrid屬性的自定義DataGridDataGridCell添加樣式。例如,我想要一個名爲VisualizeReadOnlyCells的DependencyProperty,如果該屬性設置爲True,那麼我想要使用ReadOnly的DataGridCell以灰色背景繪製。和其他類似的事情。作爲解決方法,我爲DataGridCell創建了兩種不同的樣式,並將這些樣式指定爲DataGrid樣式定義中DataGridCellStyle屬性。但隨着更多的屬性,這種風格的數量將增加,代碼將是非常難以管理的。基於DataGrid屬性的DataGridCell樣式

我目前的解決辦法是:

<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> 

我希望得到的是這樣的:

<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> 

回答

0

如果我正確理解你的問題,你可以使用一個MultiDataTrigger和綁定到DataGridCell和父母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

那麼簡單嗎?謝謝。 – merlin