WPF DataGrid中心列混乱了MahApps样式

时间:2014-04-29 05:31:44

标签: c# wpf xaml datagrid mahapps.metro

我有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 个答案:

答案 0 :(得分: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>