.net - 如何在 WPFToolkit DataGrid 的列之间创建间隙

标签 .net wpf datagrid wpftoolkit wpfdatagrid

我有一个 WPF 数据网格(来自 WPF 工具包,如标题所示),我想要一些列之间的间隙,上面甚至没有标题,你可以看到它们之间的背景。我不知道如何管理这个。

顺便说一下,我所有的列都是 TemplateColumns,但我更喜欢一个解决方案,我不必为每一列设置样式,并且它的标题在一侧有一个gab。
也许类似 <DataGridGapColum Width="5" /> ,但不幸的是,这样的事情并不存在。

最佳答案

这将需要一些步骤。首先,我们需要关闭 DataGrid 中的 GridLines,以便我们可以获得“间隙单元格”。我们将把 GridLines 留给 DataGridCells。我们还必须指定一个 GridLinesBrush。我们无法为 DataGridColumn 创建“DataGridGapColumn”样式,因为它不是从 FrameworkElement 派生的,因此我们必须满足于 GapCellStyle 和 GapHeaderStyle。然后我们可以像这样创建一个“DataGridGapColumn”

<DataGridTextColumn Width="100"
                    CellStyle="{StaticResource DataGridGapCell}"
                    HeaderStyle="{StaticResource DataGridGapHeader}"/>

alt text

一些列和间隙列的示例
<DataGrid x:Name="dataGrid"
          GridLinesVisibility="None"
          HorizontalGridLinesBrush="Black"
          ...>
    <DataGrid.Resources>
        <!-- Regular Cell Style -->
        <Style TargetType="DataGridCell">
            <Setter Property="BorderThickness" Value="0,0,1,1"/>
            <Setter Property="BorderBrush" Value="{Binding ElementName=dataGrid, Path=HorizontalGridLinesBrush}"/>
        </Style>
        <!-- Gap Cell Style -->
        <Style x:Key="DataGridGapCell" TargetType="DataGridCell">
            <Setter Property="Background" Value="{Binding ElementName=dataGrid, Path=Background}"/>
            <Setter Property="BorderThickness" Value="0,0,1,0"/>
            <Setter Property="BorderBrush" Value="{Binding ElementName=dataGrid, Path=HorizontalGridLinesBrush}"/>
        </Style>
        <!-- Gap ColumnHeader Style -->
        <Style x:Key="DataGridGapHeader" TargetType="DataGridColumnHeader">
            <Setter Property="Background" Value="{Binding ElementName=dataGrid, Path=Background}"/>
        </Style>
    </DataGrid.Resources>
    <DataGrid.Columns>
        <DataGridTextColumn Header="Header 1" Binding="{Binding Header1}"/>
        <DataGridTextColumn Width="100" CellStyle="{StaticResource DataGridGapCell}" HeaderStyle="{StaticResource DataGridGapHeader}"/>
        <DataGridTextColumn Header="Header 2" Binding="{Binding Header2}"/>
        <DataGridTextColumn Header="Header 3" Binding="{Binding Header3}"/>
        <DataGridTextColumn Width="50" CellStyle="{StaticResource DataGridGapCell}" HeaderStyle="{StaticResource DataGridGapHeader}"/>
        <DataGridTextColumn Header="Header 4" Binding="{Binding Header4}"/>
        <DataGridTextColumn Header="Header 5" Binding="{Binding Header5}"/>
    </DataGrid.Columns>
</DataGrid>

更新
您可以将样式放在 ResourceDictionary 或 Window.Resouces 中。例子
<Window.Resources>
    <Style x:Key="DataGridGapStyle" TargetType="DataGrid">
        <Setter Property="GridLinesVisibility" Value="None"/>
        <Setter Property="HorizontalGridLinesBrush" Value="Black"/>
    </Style>
    <!-- Regular Cell Style -->
    <Style TargetType="DataGridCell">
        <Setter Property="BorderThickness" Value="1,0,1,1"/>
        <Setter Property="BorderBrush" Value="{Binding ElementName=dataGrid, Path=HorizontalGridLinesBrush}"/>
    </Style>
    <!-- Gap Cell Style -->
    <Style x:Key="DataGridGapCell" TargetType="DataGridCell">
        <Setter Property="Background" Value="{Binding ElementName=dataGrid, Path=Background}"/>
        <Setter Property="BorderThickness" Value="0,0,0,0"/>
        <Setter Property="BorderBrush" Value="{Binding ElementName=dataGrid, Path=HorizontalGridLinesBrush}"/>
    </Style>
    <!-- Gap ColumnHeader Style -->
    <Style x:Key="DataGridGapHeader" TargetType="DataGridColumnHeader">
        <Setter Property="Background" Value="{Binding ElementName=dataGrid, Path=Background}"/>
    </Style>
</Window.Resources>
<Grid>
    <DataGrid x:Name="dataGrid"
              Style="{StaticResource DataGridGapStyle}"
              AutoGenerateColumns="False"
              ItemsSource="{Binding MyCollection}">
        <DataGrid.Columns>
            <DataGridTextColumn Header="Header 1" Binding="{Binding Header1}"/>
            <DataGridTextColumn Width="100" CellStyle="{StaticResource DataGridGapCell}" HeaderStyle="{StaticResource DataGridGapHeader}"/>
            <DataGridTextColumn Header="Header 2" Binding="{Binding Header2}"/>
        </DataGrid.Columns>
    </DataGrid>
</Grid>

关于.net - 如何在 WPFToolkit DataGrid 的列之间创建间隙,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4389131/

相关文章:

c# - 在 Word Addin 中动态添加 RibbonButtons 会抛出 Collection is readonly

.net - 如何输出 rake 任务的性能时间

wpf - 在 WPF 中,我可以在 ListView 中显示空行而不绑定(bind)任何东西吗?

c# - WPF 应用程序中的条件设置

c# - 修改 Silverlight DataGrid 中的父数据行

c# - 如何在 DataGrid 中设置选定行的颜色

.net - 错误 MSB3147 : Could not find required file 'setup.bin' Publish to Local FAILURE

c# - 在 .NET 1.1 中获取编码列表

c# - WPF:DataContext 设置前的转换器默认值

wpf - 当您第一次进入单元格时,如何使 WPF Datagrid 选择一个单元格