WPF - 在网格列边缘水平居中 TextBlock

问题描述 投票:0回答:1

我有以下网格:

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="2*" />
        <ColumnDefinition Width="1*" />
        <ColumnDefinition Width="3*" />
    </Grid.ColumnDefinitions>
</Grid>

我想将两个 TextBlock 放入此 Grid 中,以便两个 TextBlock 的水平中心恰好位于列边缘(垂直对齐无关紧要):

我最接近的结果如下:

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="2*" />
        <ColumnDefinition Width="auto" />
        <ColumnDefinition Width="1*" />
        <ColumnDefinition Width="auto" />
        <ColumnDefinition Width="3*" />
    </Grid.ColumnDefinitions>
    <TextBlock Grid.Column="1"
               Text="textOfTextBlock1"/>
    <TextBlock Grid.Column="3"
               Text="textOfTextBlock2"/>
</Grid>

导致

但是如果我们仔细观察,两个图像中的 TextBlock 的位置并不相同,因为宽度为 2*、1* 和 3* 的列的实际列宽是根据剩余的总空间计算的after 文本块获取其宽度。

我不想在解决方案中指定精确的坐标,当然,当网格大小调整时,文本块的位置应该改变。

我也在思考以下问题:

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="2*" />
        <ColumnDefinition Width="0" />
        <ColumnDefinition Width="1*" />
        <ColumnDefinition Width="0" />
        <ColumnDefinition Width="3*" />
    </Grid.ColumnDefinitions>
    <TextBlock Grid.Column="1"
               Text="textOfTextBlock1"/>
    <TextBlock Grid.Column="3"
               Text="textOfTextBlock2"/>
</Grid>

但是列正在切割/剪裁 TextBlock 的边缘,因此第二列和第四列的列宽为 0 时,TextBlock 不可见。

wpf wpf-grid horizontal-alignment
1个回答
0
投票

假设 TextBlock 的宽度始终低于某个最大值,您可以设置固定的

Width
和适当的
Margin
和对齐方式:

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="2*" />
        <ColumnDefinition Width="1*" />
        <ColumnDefinition Width="3*" />
    </Grid.ColumnDefinitions>

    <TextBlock Grid.Column="1" Text="textOfTextBlock1"
               Width="200" Margin="-100,0"
               HorizontalAlignment="Left" TextAlignment="Center"/>

    <TextBlock Grid.Column="2" Text="textOfTextBlock2"
               Width="200" Margin="-100,0"
               HorizontalAlignment="Left" TextAlignment="Center"/>
</Grid>
© www.soinside.com 2019 - 2024. All rights reserved.