如何将标头的高度设置为最大高度?

时间:2019-01-24 12:13:12

标签: c# wpf wpfdatagrid

我有一个使用2种样式的数据网格,因此某些标头使用它们,而另一些则使用另一种样式。主要目的是将之一对准左侧,将另一个对准右侧。

样式如下:

<Style x:Key="DataGridColumnHeaderLeftAlignement" TargetType="{x:Type DataGridColumnHeader}">
                <Setter Property="HorizontalAlignment" Value="Stretch"/>
                <Setter Property="VerticalAlignment" Value="Center"/>
                <Setter Property="FontWeight" Value="Black"/>
                <Setter Property="VerticalContentAlignment" Value="Center"/>
                <Setter Property="Height" Value="25"/>
                <!--Lo interesante sería tener un poco de margen entre la cabecera y la primera
                línea, pero al poner un margin tipo 0,0,0,10 aparece un background que no se sabe
                cómo quitar, por lo que mejor no se pone margen.
                @#REVISAR-05: ver cómo se puede dejar ese espacio.-->
                <Setter Property="Margin" Value="0,0,0,0"/>
                <Setter Property="Background" Value="Transparent"/>
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type DataGridColumnHeader}">
                            <Grid>
                                <Themes:DataGridHeaderBorder BorderBrush="Black" BorderThickness="0,0,0,2" Background="LightGray" Padding="10, 0, 0, 2" SeparatorBrush="Transparent" SeparatorVisibility="Collapsed">
                                    <ContentPresenter HorizontalAlignment="Left" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
                                </Themes:DataGridHeaderBorder>
                            </Grid>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>

            <Style x:Key="DataGridColumnHeaderRightAlignement" TargetType="{x:Type DataGridColumnHeader}">
                <Setter Property="HorizontalAlignment" Value="Stretch"/>
                <Setter Property="VerticalAlignment" Value="Center"/>
                <Setter Property="FontWeight" Value="Black"/>
                <Setter Property="VerticalContentAlignment" Value="Center"/>
                <Setter Property="Height" Value="AUTO"/>
                <Setter Property="Margin" Value="0,0,0,0"/>
                <Setter Property="Background" Value="Transparent"/>
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type DataGridColumnHeader}">
                            <Grid>
                                <Themes:DataGridHeaderBorder BorderBrush="Black" BorderThickness="0,0,0,2" Background="LightGray" Padding="3, 0, 10, 2" SeparatorBrush="Transparent" SeparatorVisibility="Collapsed">
                                    <ContentPresenter HorizontalAlignment="Right" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
                                </Themes:DataGridHeaderBorder>
                            </Grid>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>

在向右对齐的样式中,我将高度设置为AUTO,因为它可以有两行,所以我想调整内容。但是,标题的其余部分将其高度保持为25,因为它们使用的样式设置为25。但是,我尝试设置AUTO,结果是相同的,根据标题所使用的样式,每个标题的高度都不同。

所以我的问题是,是否可以将所有标头的高度调整到最大标头大小?

我还有一个属性,如果为true,则必须在标题中使用2行,如果为false,则必须使用1行,因此另一种选择是检查此变量的条件样式在视图模型的属性中。

1 个答案:

答案 0 :(得分:1)

您的样式需要进行两次更改

1)删除用于设置列高度的行。

<Setter Property="Height" Value="AUTO"/> //remove this

2)将VerticalAlignment设置为可拉伸,以便那些较小的标头可以将高度设置为等于较大的标头

<Setter Property="VerticalAlignment" Value="Stretch"/> //update from Center to Stretch
相关问题