【问题标题】:How do you have Silverlight resize text content to fit?您如何让 Silverlight 调整文本内容的大小以适合?
【发布时间】: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>

【问题讨论】:

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

标签: wpf silverlight silverlight-2.0 font-size


【解决方案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.

【讨论】:

  • 虽然手动调整大小可能很方便,但我认为这不是答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-08
  • 2020-04-14
  • 2011-12-24
  • 2015-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多