2011-12-12 92 views
0

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

我想垂直居中对齐它们,但我不想让模板列包含复选框和文本框。

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

编辑: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:其实,我也不需要垂直对齐。只需在顶部添加一点填充,以便与模板列的顶部对齐。

+0

你能告诉XAML? – sll

+1

OK,这里是XAML – AndyD273

+1

有几个建议位置: http://stackoverflow.com/questions/3981250/datagrid-row-content-vertical-alignment – Scott

回答

2

你尝试过这样的:

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

这工作。额外的问题。有没有办法将样式应用于某些列而不是其他列?我尝试设置一个边距,让它有一个没有居中对齐的空间,并且它工作正常,但是模板列被压低了相同的数量,并且从一开始就低一点,所以看起来很愚蠢。我可以选择中心风格,但很高兴知道未来的选择。 – AndyD273

+1

在您的DataGrid中,修改特定列的ElementStyle。如果你正在寻找它来根据列中的数据类型做些什么,我也会使用DataTriggers。 – Xcalibur37

+0

工作,谢谢 – AndyD273