2011-12-06 68 views
3

我正在按照StackOverflow中的一些答案建議的方式將我的TextBlock包裝在Viewbox中,並且這呈現爲我想要的。但是在做了一些小小的研究後,我明白這會妨礙性能,特別是當你有相當數量的使用這種方法的TextBlocks時。Silverlight中的動態TextBlock字體大小

在Silverlight中有更好的方法嗎?

注意:只要我能顯示文本,我不介意使用除TextBlock以外的其他東西。

+1

什麼是控制文本的大小?您可以將'FontSize'綁定到視圖中的另一個元素或視圖模型中的一個屬性。 – ChrisF

+0

不知道這是可能的,因爲我幾乎所有的控件都使用動態比例調整(使用網格)。由於我在各地使用TextBlocks,所以我希望有一個解決方案,不需要明確計算和綁定字體大小。 –

+0

你有這樣的事情:'FontSize =「{Binding ElementName = YourGrid,Path = ActualHeight,Converter = {StaticResource myConverter}」'轉換器將採用網格的ActualHeight(說)並做任何你想要的它 - 使用相對的計算。更多信息 - http://www.chrisforman.me.uk/2011/05/a-nifty-silverlight-feature/。不知道這是你想要的,但它不是一個答案。 – ChrisF

回答

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

沒有參與只是一個神奇的計算ViewBoxes。線程中還有其他建議,例如更改字體大小並測量幾次直到文本適合。

+0

我希望能找到一個XAML唯一的解決方案,但是這比在所有地方使用ViewBox都更好。 –