C# 限制旋转文本块大小

C# 限制旋转文本块大小,c#,wpf,windows,xaml,C#,Wpf,Windows,Xaml,在旋转文本块后,我试图限制第一列的高度以匹配第二列的高度 我有以下XAML: <Viewbox> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition /> <ColumnDefinition /> </Grid.ColumnDefinitions> <TextBloc

在旋转文本块后,我试图限制第一列的高度以匹配第二列的高度

我有以下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来实现这一点吗?即,不绑定高度或代码。我也不想指定控件的任何边距


谢谢。

这是我能想到的最好的了。不好的部分是硬编码的行定义,但是因为在viewbox中已经有了根网格,它是相对的,所以这应该不是一个大问题

<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>

这是我能想到的最好的了。不好的部分是硬编码的行定义,但是因为在viewbox中已经有了根网格,它是相对的,所以这应该不是一个大问题

<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>

对代码稍加修改即可满足您的需求:

首先:您的更新代码

<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>

第二:解释

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

这就是你所需要的!没有硬编码的添加内容=)

代码中的细微修改可以满足您的需求:

首先:您的更新代码

<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>

第二:解释

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

这就是你所需要的!没有硬编码添加的内容=)

我不太同意在这里硬编码高度/宽度:(让我试着像我说的那样发布我的解决方案,因为它在一个视图框中,我们在这里处理矢量图形,我看不出有什么问题。OP特别要求一个没有“绑定到高度”的解决方案。否则,您的解决方案也是完全有效的。现在这取决于OP实际需要什么。因为这将被合并到一个更大的场景中,所以我不能使用绑定,因为它的复杂性和可能的速度开销(加上将来自动生成元素时的大量引用和混乱的元素名称,如果决定的话)。是的,行高很乱,但我没有看到更好的解决方案,所以我决定采用此实现。但无论如何,感谢这两种解决方案,我相信很多人都会喜欢绑定或此硬编码版本。我不太同意在此处硬编码高度/宽度:(让我试着发布我的解决方案,就像我说的,因为它在一个视图框中,我们在这里处理矢量图形,我看不出有什么问题。OP特别要求一个没有“绑定到高度”的解决方案。)。否则,您的解决方案也是完全有效的。现在这取决于OP实际需要什么。因为这将被合并到一个更大的场景中,所以我不能使用绑定,因为它的复杂性和可能的速度开销(加上将来自动生成元素时的大量引用和混乱的元素名称,如果决定的话).是的,行高度很乱,但我没有看到更好的解决方案,所以我决定采用此实现。但无论如何,感谢这两种解决方案,我相信很多人都会喜欢绑定或硬编码版本。