您如何让 Silverlight 调整文本内容的大小以适合?

Posted

技术标签:

【中文标题】您如何让 Silverlight 调整文本内容的大小以适合?【英文标题】:How do you have Silverlight resize text content to fit? 【发布时间】:2010-10-18 14:25:34 【问题描述】:

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

我希望文本的大小尽可能大,但仍适合控件的边界。在 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>

【问题讨论】:

我真的很惊讶没有发现其他人有这个问题。当然,任何与包含文本的动态数据源的数据绑定都有这个问题?文本块是否仅用于自定义按钮? 【参考方案1】:

昨天有人问了一个类似的问题,关于根据容器大小自动调整内容大小。这种情况下的答案是一样的:使用 Viewbox。如果您将 TextBlock 放在 Viewbox 内,TextBlock 将自行调整大小以仅使用它需要的空间,并且 Viewbox 将处理将其拉伸到容器的尺寸。使用拉伸属性从四种拉伸方法中选择一种。

看看昨天的这个帖子:

WPF Gui that changes size with window?

【讨论】:

好东西 Rich,救了我。 +1 :)【参考方案2】:

尝试使用Dockpanel 而不是网格。使用 LastChildFill=true 应该会得到您正在寻找的行为。

【讨论】:

我在 TextBlock 填充椭圆顶部的所有可用空间之后,使用 DockPanel 将在两者之间划分可用区域。 此外,即使 TextBlock 的尺寸扩大,DockPanel 也不会将字体的大小扩大到可用空间中允许的最大尺寸。我怀疑这很难做到…… 如果您将椭圆停靠在 DockPanel 的顶部,那么它不应该改变大小。但是,琼关于文本大小不变的观点仍然成立。【参考方案3】:

您是否研究过变换 ScaleTransform?

ib.

【讨论】:

虽然手动调整大小可能很方便,但我认为这不是答案。

以上是关于您如何让 Silverlight 调整文本内容的大小以适合?的主要内容,如果未能解决你的问题,请参考以下文章

内容控制内容调整以填充Silverlight 4

如何在silverlight中将子元素的宽度绑定到父元素的宽度

如何让RichTextBox自动调整大小

如何让 UITextView 根据内容动态调整自身大小

如何防止用户调整 silverlight 浏览器外窗口的大小?

如何使节标题中的 UITextView 将其高度调整为其内容