你如何让Silverlight调整文本内容以适应?

时间:2009-04-09 15:49:20

标签: wpf silverlight silverlight-2.0 font-size

我有一个用户控件(下面),我正在将文本绑定到数据源并实例化一堆用户控件。

我希望文本的大小尽可能大,仍然适合控件的范围。在Windows编程中,我可以测量文本大小,减小字体大小,直到它符合目标尺寸。

有没有办法在Silverlight中执行此操作?

我知道我可能会以类似的方式做到这一点,但有没有“更好”的方法呢?

<Grid x:Name="gdBubble" Width="180" Height="95">
    <Ellipse x:Name="elBubble" Fill="#FFFFA300" />
    <TextBlock x:Name="txtContent" Text="{ Binding ClientName }" HorizontalAlignment="Center" VerticalAlignment="Center" />
</Grid>

[我在这里使用网格,以使文本块正确居中。]

答案就像Rich描述的那样使用Viewbox。

这是获胜的配置(对我来说):

<Grid x:Name="gdBubble" Width="180" Height="95">
    <Ellipse x:Name="elBubble" Fill="#FFFFA300" />
    <controls:Viewbox Margin="10,10,10,10" VerticalAlignment="Stretch" Height="Auto">
        <TextBlock x:Name="txtContent" FontSize="18" Text="{ Binding ClientName }" HorizontalAlignment="Center" VerticalAlignment="Center" />
    </controls:Viewbox>
</Grid>

3 个答案:

答案 0 :(得分:21)

昨天提出了一个类似的问题,即相对于容器大小自动调整内容大小。在这种情况下的答案是相同的:使用Viewbox。如果将TextBlock放在Viewbox中,TextBlock将自行调整大小以仅使用它所需的空间,Viewbox将处理将其拉伸到容器的尺寸。使用stretch属性从四种拉伸方法中选择一种。

从昨天开始看看这个帖子:

WPF Gui that changes size with window?

答案 1 :(得分:0)

尝试Dockpanel而不是网格。使用LastChildFill = true可以获得您正在寻找的行为。

答案 2 :(得分:0)

您是否考虑过变换ScaleTransform?

IB。