列的WPF DataGrid边框已移动

时间:2018-08-24 21:14:41

标签: c# wpf datagrid border

我完全不知道哪个属性导致垂直单元格边界的移动。内容已正确对齐中央,但边框似乎认为其对齐正确。

DataGrid Example

XAML定义是:

<DataGrid x:Name="DG_ComparedSet" 
          AllowDrop="True"
          Background="AliceBlue"
          HorizontalAlignment="Stretch"
          AutoGenerateColumns="False" 
          PreviewDragEnter="File_DragEvent" 
          PreviewDragOver="File_DragEvent" 
          PreviewDrop="DG_ComparedSet_PreviewDrop">
    <DataGrid.ContextMenu>
        <ContextMenu>
            <MenuItem Header="Clear Comparison" Name="CXM_clearComparison" Click="CXM_clearComparison_Click" />
        </ContextMenu>
    </DataGrid.ContextMenu>
</DataGrid>

以编程方式构建的DataGrid布局是通过以下方式完成的:

Style cellStyle = new Style(typeof(DataGridCell));
cellStyle.Setters.Add(new Setter(DataGridCell.FontFamilyProperty, new FontFamily("Consolas")));
cellStyle.Setters.Add(new Setter(DataGridCell.HorizontalAlignmentProperty, HorizontalAlignment.Center));
cellStyle.Setters.Add(new Setter(DataGridCell.VerticalAlignmentProperty, VerticalAlignment.Center));
cellStyle.Setters.Add(new Setter(DataGridCell.ForegroundProperty, Brushes.MediumSeaGreen));

foreach (string colHead in parameters)
{
    DataGridTextColumn col = new DataGridTextColumn
    {
         Header = colHead,
         FontFamily = new FontFamily("Consolas"),
         Binding = new Binding(colHead),
         CellStyle = cellStyle
    };
    DG_ComparedSet.Columns.Add(col);
}
DG_ComparedSet.ItemsSource = dtOut.DefaultView;

缺少哪个属性或设置不正确?

1 个答案:

答案 0 :(得分:0)

您对单元格对齐方式的设置将使列显示不再可用。没有看到更多代码,我无法确定您的意图,但是如果您想使单元格文本居中,则将内容而不是单元格本身居中。

Style cellStyle = new Style (typeof (DataGridCell));
cellStyle.Setters.Add (new Setter (DataGridCell.FontFamilyProperty, new FontFamily ("Consolas")));
//cellStyle.Setters.Add (new Setter (DataGridCell.HorizontalAlignmentProperty, HorizontalAlignment.Center));
//cellStyle.Setters.Add (new Setter (DataGridCell.VerticalAlignmentProperty, VerticalAlignment.Center));
cellStyle.Setters.Add (new Setter (TextBlock.TextAlignmentProperty, TextAlignment.Center));
cellStyle.Setters.Add (new Setter (DataGridCell.ForegroundProperty, Brushes.MediumSeaGreen));

那当然是假设您的单元格仅包含文本字符串。