在我的WPF应用程序中,我有DataGrid
多个DataGridTemplateColumns
。其中一列如下:
<DataGridTemplateColumn Header="Column" Width="*">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ListBox ItemsSource="{Binding SomeSource}">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" Margin="5"/>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemTemplate>
<DataTemplate>
<Border BorderBrush="Green" HorizontalAlignment="Center" VerticalAlignment="Center" CornerRadius="6" BorderThickness="2">
<StackPanel Background="Green" Width="200" Height="150">
<TextBlock Text="{Binding Title}" HorizontalAlignment="Center" FontSize="17" FontWeight="Bold" />
</StackPanel>
</Border>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
这会产生以下输出:
正如您所看到的,显示TextBlock
的{{1}}未在绿色Title
内垂直居中。我怎样才能做到这一点?
答案 0 :(得分:2)
StackPanel
没有高度的概念,所以你不能垂直对齐它的孩子。你必须做一些不同的事情。
例如,将固定的150高度和背景从StackPanel移动到其父边框 - 这样,您可以在Border中垂直对齐StackPanel:
<Border Background="Green" Height="150" BorderBrush="Green" HorizontalAlignment="Center" VerticalAlignment="Center" CornerRadius="6" BorderThickness="2">
<StackPanel Width="200" VerticalAlignment="Center">
<TextBlock Text="{Binding}" HorizontalAlignment="Center" FontSize="17" FontWeight="Bold" />
</StackPanel>
</Border>
(不清楚为什么你使用那个内部StackPanel,因为它只有一个孩子,但我已经假设你要为它添加别的东西了。)