在Datagrid行上填充
我有一个带有文本列,两个模板列和两个复选框列的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:其实,我也不需要垂直对齐。只需在顶部添加一点填充,以便与模板列的顶部对齐。
你尝试过这样的:
<Style TargetType="{x:Type DataGridCell}">
<Setter Property="VerticalAlignment" Value="Center" />
</Style>
这工作。额外的问题。有没有办法将样式应用于某些列而不是其他列?我尝试设置一个边距,让它有一个没有居中对齐的空间,并且它工作正常,但是模板列被压低了相同的数量,并且从一开始就低一点,所以看起来很愚蠢。我可以选择中心风格,但很高兴知道未来的选择。 – AndyD273
在您的DataGrid中,修改特定列的ElementStyle。如果你正在寻找它来根据列中的数据类型做些什么,我也会使用DataTriggers。 – Xcalibur37
工作,谢谢 – AndyD273
你能告诉XAML? – sll
OK,这里是XAML – AndyD273
有几个建议位置: http://stackoverflow.com/questions/3981250/datagrid-row-content-vertical-alignment – Scott