您如何让 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中将子元素的宽度绑定到父元素的宽度