0

我试图在旋转 TextBlock 后限制第一列的高度以匹配第二列的高度。

我有以下 XAML:

<Viewbox>
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition />
            <ColumnDefinition />
        </Grid.ColumnDefinitions>

        <TextBlock
            Grid.Column='1'
            Text='Ubuntu'
            FontFamily='Ubuntu'
            FontSize='36' />

        <TextBlock
            Grid.Column='0'
            Text='Linux'
            FontFamily='Ubuntu'
            FontSize='36'>
            <TextBlock.LayoutTransform>
                <RotateTransform
                    Angle='-90' />
            </TextBlock.LayoutTransform>
        </TextBlock>

    </Grid>
</Viewbox>

这将呈现以下内容:

实际输出

但是,我正在尝试获取此输出,以便左列的高度将适应第二列的高度:

期望的输出

您知道如何纯粹使用声明性 XAML 来做到这一点吗?IE。没有绑定到高度或代码隐藏。我也不想指定控件的任何边距。

谢谢。

4

2 回答 2

2

对代码稍作修改可以为您提供所需的内容:

第一:您更新的代码

<Grid >
            <Grid.ColumnDefinitions>
                <ColumnDefinition />
                <ColumnDefinition />
            </Grid.ColumnDefinitions>

            <TextBlock x:Name="UbuntuBox"
            Grid.Column='1'
            Text='Ubuntu'
            FontFamily='Ubuntu'
            FontSize='36' />

            <TextBlock Width="{Binding ElementName=UbuntuBox, Path=Height}"
            Grid.Column='0'
            Text='Linux'
            FontFamily='Ubuntu'
            >
            <TextBlock.LayoutTransform>
                <RotateTransform
                    Angle='-90' />
            </TextBlock.LayoutTransform>
            </TextBlock>

        </Grid>

二:说明

  • TextBlock显示的“Linux”必须链接到 Ubuntu TextBlock。在这种情况下,它Width必须与 Ubuntu 相同Height,所以我添加了以下内容:Width="{Binding ElementName=UbuntuBox, Path=Height}"
  • 你不能有TextBlock36FontSize适合这个给定的宽度。删除它将保持默认设置,然后您可以根据需要使用它

这就是你所需要的!那里没有硬编码添加的东西=)

于 2012-09-25T15:08:44.370 回答
1

This is the best i could come up with. The bad part is the hardcoded row definition, but because you already have the root grid inside a viewbox, its relative, so it shouldn't be a big problem.

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition />
        <ColumnDefinition />
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition Height="36"/>
    </Grid.RowDefinitions>
    <TextBlock
        Grid.Column='1'
        Text='Ubuntu'
        FontFamily='Ubuntu'
        FontSize='36' />

    <Viewbox Grid.Column='0'>
        <TextBlock
            Text='Linux'
            FontFamily='Ubuntu'
            FontSize='36'>
            <TextBlock.LayoutTransform>
                <RotateTransform
                    Angle='-90' />
            </TextBlock.LayoutTransform>
        </TextBlock>
    </Viewbox>
</Grid>
于 2012-09-25T14:53:55.797 回答