如何在WPF的Datagrid行标题中居中对齐行号

3

我在数据网格中使用以下代码来显示行号。

<DataGrid Name="DataGrid" LoadingRow="DataGrid_LoadingRow" ...

void DataGrid_LoadingRow(object sender, DataGridRowEventArgs e)
{
   e.Row.Header = (e.Row.GetIndex()).ToString(); 
}

如何将这些数字在行标题中居中对齐?

你需要根据你的需求来设置标题的样式。 - Nikhil Agrawal
4个回答

5
<DataGrid x:Name="dataGrid" AutoGenerateColumns="False" LoadingRow="OnLoadingRow">
    <DataGrid.Columns>
        <DataGridTextColumn Header="Id" Binding="{Binding Id}"/>
        <DataGridTextColumn Header="Name" Binding="{Binding Name}"/>
    </DataGrid.Columns>
    <DataGrid.RowHeaderTemplate>
        <DataTemplate>
            <Label HorizontalAlignment="Center"
                   Content="{Binding RelativeSource={RelativeSource AncestorType=DataGridRow},
                                     Path=Header}"/>
        </DataTemplate>
    </DataGrid.RowHeaderTemplate>
</DataGrid>

1
为了使DataGrid行标头中的行号居中对齐,请使用自定义RowHeaderStyle模板。您可以在Visual Studio 2012或更高版本中通过在设计模式下右键单击DataGrid并选择“编辑其他模板”->“编辑RowHeaderStyle”->“编辑副本”来生成默认模板。一旦您给新样式资源命名并选择生成位置,就可以根据要求修改生成的XAML模板。由于每个Windows版本的模板略有不同,但在Windows 8及以上版本中,您只需要将Themes:DataGridHeaderBorder中的StackPanel设置为HorizontalAlignment="Center"即可。我将包含Windows 10秋季更新DataGrid RowHeaderStyle模板的片段。
<DataGrid.Resources>
            <BooleanToVisibilityConverter x:Key="bool2VisibilityConverter"/>
            <Style x:Key="RowHeaderGripperStyle" TargetType="{x:Type Thumb}">
                <Setter Property="Height" Value="8"/>
                <Setter Property="Background" Value="Transparent"/>
                <Setter Property="Cursor" Value="SizeNS"/>
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type Thumb}">
                            <Border Background="{TemplateBinding Background}" Padding="{TemplateBinding Padding}"/>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
            <Style x:Key="DataGridRowHeaderStyle1" TargetType="{x:Type DataGridRowHeader}">
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type DataGridRowHeader}">
                            <Grid>
                                <Themes:DataGridHeaderBorder BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" IsPressed="{TemplateBinding IsPressed}" IsHovered="{TemplateBinding IsMouseOver}" IsSelected="{TemplateBinding IsRowSelected}" Orientation="Horizontal" Padding="{TemplateBinding Padding}" SeparatorBrush="{TemplateBinding SeparatorBrush}" SeparatorVisibility="{TemplateBinding SeparatorVisibility}">
                                <StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
                                        <ContentPresenter RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="Center"/>
                                        <Control SnapsToDevicePixels="false" Template="{Binding ValidationErrorTemplate, RelativeSource={RelativeSource AncestorType={x:Type DataGridRow}}}" Visibility="{Binding (Validation.HasError), Converter={StaticResource bool2VisibilityConverter}, RelativeSource={RelativeSource AncestorType={x:Type DataGridRow}}}"/>
                                    </StackPanel>
                                </Themes:DataGridHeaderBorder>
                                <Thumb x:Name="PART_TopHeaderGripper" Style="{StaticResource RowHeaderGripperStyle}" VerticalAlignment="Top"/>
                                <Thumb x:Name="PART_BottomHeaderGripper" Style="{StaticResource RowHeaderGripperStyle}" VerticalAlignment="Bottom"/>
                            </Grid>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
        </DataGrid.Resources>

1

只需像这样为 RowHeader 添加样式

        <DataGrid>
            <DataGrid.RowHeaderStyle>
                <Style TargetType="DataGridRowHeader">
                    <Setter Property="HorizontalContentAlignment" Value="Center"></Setter>
                </Style>
            </DataGrid.RowHeaderStyle>
        </DataGrid>

0

我像Cuong Tran Duc回答的那样使用它,但是通过一些填充,您可以改善外观:

<DataGrid.RowHeaderStyle><Style TargetType="DataGridRowHeader">
    <Setter Property="HorizontalContentAlignment" Value="Center"></Setter>
    <Setter Property="Padding" Value="5 0"></Setter></Style>
</DataGrid.RowHeaderStyle>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接