Tùy chỉnh Giao diện DataGrid trong WPF

Căn Giữa Tiêu Đề Cột và Nội Dung Ô

Để căn giữa tiêu đề của các cột trong DataGrid, bạn có thể định nghĩa một Style riêng cho DataGridColumnHeader:

<Style x:Key="ColumnHeaderCenterStyle" TargetType="DataGridColumnHeader">
    <Setter Property="HorizontalContentAlignment" Value="Center"/>
    <Setter Property="Background" Value="#A9A9A9"/>
    <Setter Property="Foreground" Value="White"/>
</Style>

Tương tự, để căn giữa nội dung bên trong các ô, bạn có thể tạo Style cho DataGridCell:

<Style x:Key="DataCellCenterStyle" TargetType="DataGridCell">
    <Setter Property="HorizontalAlignment" Value="Center"/>
    <Setter Property="VerticalAlignment" Value="Center"/>
</Style>

Bạn cũng có thể cần một bộ chuyển đổi màu sắc nếu muốn chuyển đổi chuỗi màu thành đối tượng màu thực tế:

<local:StringToColorConverter x:Key="ColorConverter"/>

Áp Dụng Các Kiểu Dáng Phổ Biến

Dưới đây là một tập hợp các Style tùy chỉnh để cải thiện giao diện của DataGrid:

<!-- Kiểu dáng cho tiêu đề cột -->
<Style TargetType="DataGridColumnHeader">
    <Setter Property="HorizontalContentAlignment" Value="Center"/>
    <Setter Property="Background" Value="#808080"/>
    <Setter Property="Foreground" Value="White"/>
    <Setter Property="BorderThickness" Value="1"/>
    <Setter Property="BorderBrush" Value="#808080"/>
    <Setter Property="Height" Value="35"/>
    <Setter Property="FontSize" Value="13"/>
</Style>

<!-- Kiểu dáng cho ô dữ liệu -->
<Style TargetType="DataGridCell">
    <Setter Property="FocusVisualStyle" Value="{x:Null}"/>
    <Setter Property="BorderThickness" Value="0"/>
    <Setter Property="FontSize" Value="13"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type DataGridCell}">
                <Grid Background="{TemplateBinding Background}">
                    <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" />
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

<!-- Kiểu dáng cho TextBlock để căn giữa -->
<Style TargetType="TextBlock" x:Key="TextBlockCenterStyle">
    <Setter Property="Foreground" Value="Black"/>
    <Setter Property="FontSize" Value="13"/>
    <Setter Property="HorizontalAlignment" Value="Center"/>
    <Setter Property="VerticalAlignment" Value="Center"/>
    <Setter Property="TextWrapping" Value="Wrap"/>
</Style>

<!-- Kiểu dáng cho hàng, bao gồm thay đổi màu xen kẽ và hiệu ứng khi di chuột/chọn -->
<Style TargetType="DataGridRow">
    <Setter Property="Height" Value="35"/>
    <Style.Triggers>
        <Trigger Property="AlternationIndex" Value="0">
            <Setter Property="Background" Value="White"/>
        </Trigger>
        <Trigger Property="AlternationIndex" Value="1">
            <Setter Property="Background" Value="#ADD8E6"/> <!-- Màu xanh nhạt -->
        </Trigger>
        <Trigger Property="IsMouseOver" Value="True">
            <Setter Property="Background" Value="#FFD700"/> <!-- Màu vàng kim -->
        </Trigger>
        <Trigger Property="IsSelected" Value="True">
            <Setter Property="Background" Value="#00BFFF"/> <!-- Màu xanh dương đậm -->
        </Trigger>
        <Trigger Property="IsFocused" Value="True">
            <Setter Property="Background" Value="#05c4ff"/>
        </Trigger>
    </Style.Triggers>
</Style>

<!-- Kiểu dáng chung cho DataGrid -->
<Style TargetType="DataGrid">
    <Setter Property="CanUserResizeColumns" Value="False"/>
    <Setter Property="Background" Value="White"/>
    <Setter Property="BorderBrush" Value="#808080"/>
    <Setter Property="SelectionUnit" Value="FullRow"/>
    <Setter Property="VerticalScrollBarVisibility" Value="Auto"/>
    <Setter Property="HorizontalScrollBarVisibility" Value="Auto"/>
    <Setter Property="RowHeaderWidth" Value="0"/>
    <Setter Property="HorizontalGridLinesBrush">
        <Setter.Value>
            <SolidColorBrush Color="#D3D3D3"/> <!-- Màu xám nhạt -->
        </Setter.Value>
    </Setter>
    <Setter Property="VerticalGridLinesBrush">
        <Setter.Value>
            <SolidColorBrush Color="#D3D3D3"/>
        </Setter.Value>
    </Setter>
</Style>

Hiển Thị Số Thứ Tự Tự Động Cho Mỗi Hàng

Để thêm cột số thứ tự tự động vào DataGrid, bạn có thể thực hiện hai bước sau:

1. Thêm một cột mới vào DataGrid trong tệp XAML:

<DataGridTextColumn Header="STT" Width="*" 
                        Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type DataGridRow}}, Path=Header}"  
                        CellStyle="{StaticResource DataCellCenterStyle}" />

2. Xử lý sự kiện LoadingRow của DataGrid trong mã C#:

private void DataGrid_LoadingRow(object sender, DataGridRowEventArgs e)
{
    // Đặt số thứ tự cho tiêu đề của hàng, bắt đầu từ 1
    e.Row.Header = e.Row.GetIndex() + 1;
}

Thẻ: WPF DataGrid XAML Style C#

Đăng vào ngày 28 tháng 7 lúc 07:37