C# 限制旋转文本块大小
在旋转文本块后,我试图限制第一列的高度以匹配第二列的高度 我有以下XAML:C# 限制旋转文本块大小,c#,wpf,windows,xaml,C#,Wpf,Windows,Xaml,在旋转文本块后,我试图限制第一列的高度以匹配第二列的高度 我有以下XAML: <Viewbox> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition /> <ColumnDefinition /> </Grid.ColumnDefinitions> <TextBloc
<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”的
必须链接到UbuntuTextBlock
。在这种情况下,它的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”的
必须链接到UbuntuTextBlock
。在这种情况下,它的TextBlock
宽度必须与Ubuntu的
高度相同,因此我添加了以下内容:
Width=“{Binding ElementName=UbuntuBox,Path=Height}”
- 不能让36
的FontSize
适合此给定宽度。删除它将使其保持默认状态,然后您可以根据需要使用它TextBlock
这就是你所需要的!没有硬编码添加的内容=)我不太同意在这里硬编码高度/宽度:(让我试着像我说的那样发布我的解决方案,因为它在一个视图框中,我们在这里处理矢量图形,我看不出有什么问题。OP特别要求一个没有“绑定到高度”的解决方案。否则,您的解决方案也是完全有效的。现在这取决于OP实际需要什么。因为这将被合并到一个更大的场景中,所以我不能使用绑定,因为它的复杂性和可能的速度开销(加上将来自动生成元素时的大量引用和混乱的元素名称,如果决定的话)。是的,行高很乱,但我没有看到更好的解决方案,所以我决定采用此实现。但无论如何,感谢这两种解决方案,我相信很多人都会喜欢绑定或此硬编码版本。我不太同意在此处硬编码高度/宽度:(让我试着发布我的解决方案,就像我说的,因为它在一个视图框中,我们在这里处理矢量图形,我看不出有什么问题。OP特别要求一个没有“绑定到高度”的解决方案。)。否则,您的解决方案也是完全有效的。现在这取决于OP实际需要什么。因为这将被合并到一个更大的场景中,所以我不能使用绑定,因为它的复杂性和可能的速度开销(加上将来自动生成元素时的大量引用和混乱的元素名称,如果决定的话).是的,行高度很乱,但我没有看到更好的解决方案,所以我决定采用此实现。但无论如何,感谢这两种解决方案,我相信很多人都会喜欢绑定或硬编码版本。