如何将 header 的高度设置为最大高度?
How to set the height of the header to the max height?
我有一个使用 2 种样式的数据网格,所以一些 header 使用它们而其他人使用另一种样式。主要目的是将一个左对齐,另一个右对齐。
样式是这些:
<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
,因为它可以有两行,所以我想调整到内容。然而,其余的 header 保持 25 的高度,因为他们使用的样式设置为 25。但是我尝试设置 AUTO 结果是一样的,每个 header 都有不同的高度取决于他们使用的风格。
所以我的问题是,是否可以将所有 header 的高度调整到最大 header 大小?
我还有一个 属性,如果它是真的,我必须在 header 中使用 2 行,如果它是假的,我必须使用 1 行,所以另一个选择是是一种条件样式,用于检查视图模型 属性 中的此变量。
您的样式需要进行两处更改
1) 删除用于设置列高的线。
<Setter Property="Height" Value="AUTO"/> //remove this
2) 将 VerticalAlignment 设置为拉伸,以便那些小的 headers 可以将高度设置为等于更大的
<Setter Property="VerticalAlignment" Value="Stretch"/> //update from Center to Stretch
我有一个使用 2 种样式的数据网格,所以一些 header 使用它们而其他人使用另一种样式。主要目的是将一个左对齐,另一个右对齐。
样式是这些:
<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
,因为它可以有两行,所以我想调整到内容。然而,其余的 header 保持 25 的高度,因为他们使用的样式设置为 25。但是我尝试设置 AUTO 结果是一样的,每个 header 都有不同的高度取决于他们使用的风格。
所以我的问题是,是否可以将所有 header 的高度调整到最大 header 大小?
我还有一个 属性,如果它是真的,我必须在 header 中使用 2 行,如果它是假的,我必须使用 1 行,所以另一个选择是是一种条件样式,用于检查视图模型 属性 中的此变量。
您的样式需要进行两处更改
1) 删除用于设置列高的线。
<Setter Property="Height" Value="AUTO"/> //remove this
2) 将 VerticalAlignment 设置为拉伸,以便那些小的 headers 可以将高度设置为等于更大的
<Setter Property="VerticalAlignment" Value="Stretch"/> //update from Center to Stretch