在StackPanel内部垂直对齐TextBlock

时间:2014-07-18 18:39:53

标签: c# wpf

在我的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>

这会产生以下输出:

enter image description here

正如您所看到的,显示TextBlock的{​​{1}}未在绿色Title内垂直居中。我怎样才能做到这一点?

1 个答案:

答案 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,因为它只有一个孩子,但我已经假设你要为它添加别的东西了。)