【问题标题】:Header style of data grid is not standardize when the data is group by expander数据按扩展器分组时,数据网格的标题样式不规范
【发布时间】:2016-06-04 15:34:05
【问题描述】:

我的数据网格标题有一个标准样式,如下所示。

当数据网格中有数据,并且我的数据被扩展器分组时,会创建一个新列,并且标题的样式不符合我的数据网格样式。

有人知道为什么扩展器的列不符合我的风格吗?

这是我的代码:

数据网格

<DataGrid ScrollViewer.HorizontalScrollBarVisibility="Auto" Name="dataGridResult"
              Grid.Row="1" RowHeight="20"  
              ItemsSource="{Binding ResultList, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
              BorderBrush="White" 
              IsReadOnly="True" 
              VirtualizingPanel.IsVirtualizingWhenGrouping="True"
              Margin="15"
              Style="{StaticResource DataGridStyle}"
              GridLinesVisibility="None">
        <DataGrid.Columns>
            <DataGridTextColumn Width="180" Header="Column1" Binding="{Binding RunNo}"/>
            <DataGridTextColumn Width="Auto" Header="Column2" Binding="{Binding TestProgramVersion}"/>
            <DataGridTextColumn Width="150" Header="Column3" Binding="{Binding StartTestTime}"/>
            <DataGridTextColumn Width="150" Header="Column4" Binding="{Binding EndTestTime}"/>
        </DataGrid.Columns>
        <DataGrid.GroupStyle>
            <GroupStyle>
                <GroupStyle.ContainerStyle>
                    <Style TargetType="{x:Type GroupItem}">
                        <Setter Property="Template">
                            <Setter.Value>
                                <ControlTemplate>
                                    <Expander x:Name="MyExpander" IsExpanded="True">
                                        <Expander.Header>
                                            <StackPanel Orientation="Horizontal">
                                                <TextBlock x:Name="MyExpanderHeader" Text="{Binding Name}" FontWeight="Bold" VerticalAlignment="Bottom"/>
                                            </StackPanel>
                                        </Expander.Header>
                                        <ItemsPresenter Margin="20,0,0,0"/>
                                    </Expander>
                                </ControlTemplate>
                            </Setter.Value>
                        </Setter>
                    </Style>
                </GroupStyle.ContainerStyle>
            </GroupStyle>
        </DataGrid.GroupStyle>
    </DataGrid>

风格

<Style x:Key="DataGridStyle" TargetType="DataGrid">
     <Setter Property="ColumnHeaderStyle" Value="{StaticResource DataGridColumnHeaderStyle}" />
</Style>

<Style x:Key="DataGridColumnHeaderStyle" TargetType="{x:Type DataGridColumnHeader}"  >
    <Setter Property="Foreground" Value="White" />
    <Setter Property="Background" Value="#FF048EC0"/>
    <Setter Property="Padding" Value="5,0,5,0"/>
    <Setter Property="HorizontalContentAlignment" Value="Left"/>
</Style>

** ===== 尝试 II Vic 的建议后更新 ===== **

  1. 隐藏“显示所有行”按钮 - 数据 1 未与列 2 正确对齐

  1. 为“显示所有行”按钮添加样式 - 不起作用

【问题讨论】:

  • 这真的很奇怪,使用“选择所有行”按钮的样式对我有用。您使用的是哪个框架版本?请您发布您的 XAML 吗?

标签: wpf datagrid header styles expander


【解决方案1】:

新创建的列样式错误,不是列标题。事实上,它是一个“选择所有行”按钮(如果你点击它,所有行都会被选中)。

由于不是列头,所以不使用列头样式。 您有两种方法可以解决您的问题:

  1. 您可以通过将DataGrid HeadersVisibility 属性设置为Column 来隐藏“选择所有行”按钮
  2. 您可以为“选择所有行”按钮创建样式。

它应该看起来像:

<Style TargetType="{x:Type Button}"
        x:Key="{ComponentResourceKey ResourceId=DataGridSelectAllButtonStyle, TypeInTargetAssembly={x:Type DataGrid}}">

    <Setter Property="Foreground" Value="White" />
    <Setter Property="Background" Value="#FF048EC0"/>
    <Setter Property="Padding" Value="5,0,5,0"/>
    <Setter Property="HorizontalContentAlignment" Value="Left"/>
</Style>

希望对你有帮助。

【讨论】:

  • 感谢您的帮助!我已经尝试了两种方法。对于第1个,它隐藏了“选择所有行”按钮,最终会导致数据与表头不对齐。第二种方法对我不起作用。请在 OP 中查看我的更新。谢谢。
猜你喜欢
  • 2012-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-19
  • 1970-01-01
  • 2014-05-06
  • 1970-01-01
相关资源
最近更新 更多