【问题标题】:Dynamic TextBlock font size in SilverlightSilverlight 中的动态 TextBlock 字体大小
【发布时间】:2023-03-18 05:45:01
【问题描述】:

我目前正在将我的 TextBlock 包装在一个 Viewbox 中,正如 StackOverflow 上的几个答案所建议的那样,这会按照我的意愿呈现。但是在做了一些研究之后,我了解到这会影响性能,尤其是当您有大量使用这种方法的 TextBlock 时。

在 Silverlight 中有更好的方法吗?

注意:只要我能显示文本,我不介意使用 TextBlock 以外的东西。

【问题讨论】:

  • 是什么控制了文本的大小?您可以将FontSize 绑定到视图中的另一个元素或视图模型中的属性。
  • 不确定这是否可能,因为我对几乎所有控件(使用网格)都使用动态比例大小。由于我到处使用 TextBlocks,我希望有一个不需要显式计算和绑定字体大小的解决方案。
  • 你有这样的东西:FontSize="{Binding ElementName=YourGrid, Path=ActualHeight, Converter={StaticResource myConverter}" 转换器将采用网格的ActualHeight(比如说)并用它做任何你想做的事情 - 使用相对计算。更多信息-chrisforman.me.uk/2011/05/a-nifty-silverlight-feature。虽然不确定这是你想要的,因此它不是一个答案(还)。
  • 尽管 ActualWidth/ActualHeight 是依赖属性,但在 Silverlight 中绑定到它们并不是一个聪明的主意,因为它们是计算属性(因此属性更改通知不会在它们更改时触发)。
  • 啊 - 我让它工作的情况是ActualWidth 不会改变的情况。我这里只用了一个例子,还有其他的属性可以用吗?

标签: c# silverlight dynamic font-size


【解决方案1】:

From this forum

// Event handler
private void ControlsSizeChanged(object sender, System.Windows.SizeChangedEventArgs e)
{
    GetFontSize(sender as Control);
}

// Method for font size changes
public static void GetFontSize(Control control)
{
    PropertyInfo info;
    if (control == null || control.ActualHeight <= 0)
        return;
    if(( info = control.GetType().GetProperty("FontSize", typeof(double))) != null)
    {
        info.SetValue(control, 0.7 * control.ActualHeight, null);
    }
}

没有 ViewBox 只涉及一个神奇的计算。线程中还有其他建议,例如更改字体大小并测量几次,直到文本适合为止。

【讨论】:

  • 我希望找到一个仅适用于 XAML 的解决方案,但这比到处使用 ViewBox 更好。谢谢:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-29
相关资源
最近更新 更多