【问题标题】:Padding on a Datagrid Row在 Datagrid 行上填充
【发布时间】:2012-01-18 19:52:45
【问题描述】:

我有一个带有文本列、两个模板列和两个复选框列的 WPF 数据网格。
模板列垂直居中对齐(顶部和底部填充相同),文本列顶部有一点填充,但底部有很多,复选框顶部只有大约 1 个像素的填充。

我想将它们全部居中垂直对齐,但我不想制作一个模板列来保存复选框和文本框。

这样做的正确方法是什么?

编辑:XAML

        <DataGrid AutoGenerateColumns="False" Name="dgROList" ItemsSource="{Binding ElementName=MainWindow, Path=cROInfo}" CanUserDeleteRows="True" CanUserReorderColumns="False" GridLinesVisibility="Horizontal" Margin="0,0,0,0" Grid.ColumnSpan="2" AlternatingRowBackground="#FFFFE776">
            <DataGrid.ContextMenu>
                <ContextMenu>
                    <MenuItem Name="mnuDelete" Header="Delete" />
                </ContextMenu>
            </DataGrid.ContextMenu>
            <DataGrid.Columns>
                <DataGridTextColumn Header="RO Number" Width="Auto" Binding="{Binding RONum}" />
                <DataGridTemplateColumn x:Name="roDetails" Header="RO Details" Width="*">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <ItemsControl Name="LineDetails" ItemsSource="{Binding LineInfo}" Width="Auto" Grid.IsSharedSizeScope="True">
                                <ItemsControl.Template>
                                    <ControlTemplate TargetType="ItemsControl">
                                        <ItemsPresenter />
                                    </ControlTemplate>
                                </ItemsControl.Template>
                                <ItemsControl.ItemsPanel>
                                    <ItemsPanelTemplate>
                                        <StackPanel Orientation="Vertical" />
                                    </ItemsPanelTemplate>
                                </ItemsControl.ItemsPanel>
                                <ItemsControl.ItemTemplate>
                                    <DataTemplate>
                                        <Grid>
                                            <Grid.ColumnDefinitions>
                                                <ColumnDefinition Width="20" />
                                                <ColumnDefinition Width="Auto" SharedSizeGroup="DetailCol"/>
                                                <ColumnDefinition Width="50" />
                                                <ColumnDefinition Width="150*"/>
                                            </Grid.ColumnDefinitions>
                                            <Label Content="{Binding Line}" Grid.Column="0" />
                                            <Label Content="{Binding Status}" Grid.Column="1" />
                                            <Label Content="{Binding AmountPaid}" Grid.Column="2" />
                                            <Label Content="{Binding SDate}" Grid.Column="3" />
                                        </Grid>
                                    </DataTemplate>
                                </ItemsControl.ItemTemplate>
                            </ItemsControl>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>
                <DataGridTemplateColumn x:Name="roRI" Header="RI" Width="Auto" >
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <Label Content="{Binding RI}" ToolTipService.ShowDuration="60000" ></Label>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>
                <DataGridCheckBoxColumn Header="Paid" Width="40" Binding="{Binding Paid}" />
                <DataGridCheckBoxColumn Header="Adj" Width="30" Binding="{Binding Adjustment}" />
            </DataGrid.Columns>
        </DataGrid>

编辑 2:实际上,我什至不需要垂直对齐它们。只需在顶部添加一点填充,使其与模板列的顶部对齐。

【问题讨论】:

标签: wpf datagrid


【解决方案1】:

你试过这个吗:

<Style TargetType="{x:Type DataGridCell}">
    <Setter Property="VerticalAlignment" Value="Center" />
</Style>

【讨论】:

  • 这行得通。额外的问题。有没有办法将样式应用于某些列而不是其他列?我尝试设置一个边距以在不居中对齐的情况下为其提供一点空间,并且它起作用了,但是模板列被向下推了相同的量,并且它们从一开始就低了一点,所以看起来很傻。我可能会选择中心风格,但很高兴知道未来的选择。
  • 在您的 DataGrid 中,修改特定列的 ElementStyle。如果您正在寻找它根据列中的数据类型来做某事,我也会使用 DataTriggers。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-22
  • 2013-05-01
相关资源
最近更新 更多