Silverlight中动态更改TextBlock字体大小

3

我目前正在按照StackOverflow上的一些答案建议,将我的TextBlock包装在一个Viewbox中,这样渲染效果很好。但是经过一些研究,我了解到这会影响性能,特别是当您有相当数量的使用此方法的TextBlock时。

在Silverlight中有更好的方法吗?

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


1
文本大小由什么控制?您可以将 FontSize 绑定到视图中的另一个元素或视图模型中的属性。 - ChrisF
不确定是否可能,因为我几乎在所有控件上都使用动态比例大小(使用网格)。由于我在各个地方都使用TextBlocks,所以我希望有一种解决方案,不需要显式计算和绑定字体大小。 - K Mehta
你有这样的内容:FontSize="{Binding ElementName=YourGrid, Path=ActualHeight, Converter={StaticResource myConverter}" 转换器将使用网格(例如)的ActualHeight并对其进行任何所需的操作 - 使用相对计算。更多信息 - http://www.chrisforman.me.uk/2011/05/a-nifty-silverlight-feature/. 不确定是否符合您的要求,因此这不是一个答案(但可能有帮助)。 - ChrisF
尽管ActualWidth/ActualHeight是依赖属性,但在Silverlight中绑定它们并不明智,因为它们是计算属性(所以当它们改变时,并不会触发属性更改通知)。 - K Mehta
啊 - 我成功的情况是 ActualWidth 不会改变。我只是在这里举例使用它,你能用其他属性吗? - ChrisF
很遗憾,我想不出任何解决方案。我真的希望有一些内置的Silverlight结构是我不知道的 :( - K Mehta
1个回答

1

从这个论坛

// 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);
    }
}

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


我本来希望找到一个仅使用XAML的解决方案,但这比到处使用ViewBoxes要好。谢谢 :) - K Mehta

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接