我尝试定位两个标签,一个紧挨着另一个标签(间距很小)。
e.g。
标签1标签2
每个标签的内容总是不同的,大多数情况下,标签2会有更多的字符,但我希望在调整窗口大小时缩放内容,我希望标签1和标签2中的字体大小保持一致。 / p>
我不在乎标签2的内容是否被裁剪太长时间。
我尝试使用带有两列的网格并将Label放在ViewBox中:
<Viewbox Margin="0,0,0,0" VerticalAlignment="Top" HorizontalAlignment="Left">
<Label Margin="0,0,0,0" Content="{Binding Path=Suburb}"/>
</Viewbox>
问题是,定位永远不对,字体大小不会保持一致。
实现这一目标的最佳布局方法是什么?我可以通过绑定同步字体大小吗?我已经尝试将Label 2的FontSize属性绑定到Label 1的FontSize,但这并不起作用,因为无论字体真实多大/多小,它每次都会返回12(I&I #39; m假设实际的FontSize没有被计算,因为Label在ViewBox中。)
有什么建议吗?
由于
答案 0 :(得分:2)
您可以使用以下方法:
<Viewbox VerticalAlignment="Top">
<DockPanel>
<TextBlock Text="Second" DockPanel.Dock="Right" />
<TextBlock Text="First" />
</DockPanel>
</Viewbox>
请注意,第二个标签永远不会被裁剪,因为Viewbox
会允许内容呈现为任意大小,然后进行缩放。您可以在第二个MaxWidth
上指定TextBlock
,这会限制其大小(以像素为单位)。
您可以使用DockPanel
代替Grid
而不是ColumnDefinitions
来实现相同的效果。
重要的是,它们都在同一个Viewbox
中(因此,它不会同步FontSize
,但会对其中包含的所有内容进行可视缩放。)
答案 1 :(得分:0)
以下标记似乎没问题:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Viewbox>
<Label Content="Label 1" Width="{Binding ActualWidth, ElementName=label2}"/>
</Viewbox>
<Viewbox Grid.Column="1">
<Label Name="label2" Content="Label 2 Label 2 Label 2"/>
</Viewbox>
</Grid>
答案 2 :(得分:0)
我不是100%确定“窗口调整大小时内容比例”和“字体大小保持一致”的实际意思,但我想你希望每个标签都根据可用空间进行修剪。
那么为什么不使用TextBlock
如下
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding Path=Suburb}" TextWrapping="NoWrap" TextTrimming="CharacterEllipsis" Margin="0,0,5,0" />
<TextBlock Text="{Binding Path=Area}" TextWrapping="NoWrap" TextTrimming="CharacterEllipsis" Grid.Column="1"/>
</Grid>
答案 3 :(得分:0)
我意识到这个问题已经过时了,但更正确的方法之一就是使用运行。
运行是TextBlock中的文本部分。
<TextBlock Margin="0,0,0,0" VerticalAlignment="Top" HorizontalAlignment="Left">
<Run Text="{Binding Suburb}" />
<Run Text="{Binding Area}" />
</TextBlock>
请记住,TextBlock中的所有内容都是空格敏感的,所以如果你想让两个Runs背靠背运行而中间没有任何空格,你可以这样做:
<TextBlock Margin="0,0,0,0" VerticalAlignment="Top" HorizontalAlignment="Left">
<Run Text="Foo" /><Run Text="bar" />
<!-- Prints 'Foobar' -->
</TextBlock>
它类似于HTML的呈现方式,如果标记之间有空格,则在这些元素之间的页面上呈现单个空格。此规则仅适用于 文本块中的项目,而不适用于整个XAML页面。