2014-04-29 75 views
1

我有DataGrid我使用MahApps樣式。我有一個專欄,需要集中;每次創建樣式時,與該列關聯的單元格在選中時都會有不同的外觀。WPF DataGrid居中列擾亂MahApps樣式

以下是我的DataGrid XAML。

<DataGrid ItemsSource="{Binding Path=DiariesForSelectedProject}" 
      AutoGenerateColumns="False" 
      HorizontalContentAlignment="Center" 
      HorizontalAlignment="Stretch"> 
    <DataGrid.Columns> 
     <DataGridTextColumn Header="Number" 
          Binding="{Binding Path=Number}" 
          Width="Auto" 
          IsReadOnly="True" > 
      <DataGridTextColumn.CellStyle> 
       <Style> 
        <Setter Property="FrameworkElement.HorizontalAlignment" 
          Value="Center" /> 
       </Style> 
      </DataGridTextColumn.CellStyle> 
     </DataGridTextColumn> 
     <DataGridTextColumn Header="Date" 
          Binding="{Binding Path=Date, StringFormat=d}" 
          Width="Auto" 
          IsReadOnly="True"/> 
     <DataGridTextColumn Header="Inspector" 
          Binding="{Binding Path=Inspector}" 
          Width="Auto" 
          IsReadOnly="True" /> 
     <DataGridTextColumn Header="Diary Status" 
          Binding="{Binding Path=Status}" 
          Width="Auto" 
          IsReadOnly="True" /> 
    </DataGrid.Columns> 

    <DataGrid.ItemContainerStyle> 
     <Style TargetType="DataGridRow"> 
      <Style.Triggers> 
       <MultiDataTrigger> 
        <MultiDataTrigger.Conditions> 
         <Condition Binding="{Binding Path=IsOwner}" 
            Value="True" /> 
         <Condition Binding="{Binding Path=Status}" 
            Value="Supervisor Returned" /> 
        </MultiDataTrigger.Conditions> 
        <Setter Property="Foreground" 
          Value="White" /> 
        <Setter Property="Background" 
          Value="Red" /> 
       </MultiDataTrigger> 

       <MultiDataTrigger> 
        <MultiDataTrigger.Conditions> 
         <Condition Binding="{Binding Path=IsOwner}" 
            Value="True" /> 
         <Condition Binding="{Binding Path=Status}" 
            Value="Office Returned" /> 
        </MultiDataTrigger.Conditions> 
        <Setter Property="Foreground" 
          Value="White" /> 
        <Setter Property="Background" 
          Value="Red" /> 
       </MultiDataTrigger> 
      </Style.Triggers> 
     </Style> 
    </DataGrid.ItemContainerStyle> 
</DataGrid> 

而不是使用CellStyle我有上述情況,我也試過如下:

<Style x:Key="DataGridColumnHeaderDataGridCellStyle" 
     TargetType="{x:Type DataGridCell}" 
     BasedOn="{StaticResource {x:Type DataGridCell}}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type DataGridCell}"> 
       <Grid Background="{TemplateBinding Background}"> 
        <ContentPresenter HorizontalAlignment="Center" /> 
       </Grid> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

然後引用了樣式我的手機。但是,最終的結果是兩次相同。列居中,但DataGrid單元格在選擇該行時具有不同的外觀。

enter image description here

有人能幫助我如何正確居中一列並不會弄亂MahApps風格?

謝謝!

回答

1

我解決了這個問題,使用XAMLSpy並查看行。事實證明,該樣式應用於每個單元格上的背景顏色正在重置。爲了解決它,我只是將內容展示器封裝在網格中,並將背景色設置爲透明。

<Style x:Key="DataGridColumnHeaderDataGridCellStyle" 
     TargetType="{x:Type DataGridCell}" 
     BasedOn="{StaticResource {x:Type DataGridCell}}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type DataGridCell}"> 
       <Grid Background="Transparent"> 
        <ContentPresenter HorizontalAlignment="Center" /> 
       </Grid> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style>