在Grid中的TextBox中调整字体大小

时间:2009-09-13 08:54:39

标签: c# wpf textbox font-size

我的问题已在下面得到解答,但我刚刚意识到现在FontSize仅在一个方向上调整大小。

是否有可能绑定两条路径?或另一种选择?

上一个问题 我有一个Grid [20,20],其中包含TextBox个es。在这些TextBoxe中我放了数字。当应用程序启动时,它是全屏的。如果我调整窗口大小,Grid的{​​{1}}也会调整大小。但TexBox保持不变。所以我想在Window调整大小时更改Font。我试过了:

FontSize
<{1>}代码之间的

。但这不起作用。与属性 FontSize="{Binding ElementName=aTextBox, Path=Height}" TextBox的{​​{1}}或Grid绑定也无效。通过绑定到滑块,Window会根据滑块的值进行更改。有没有人有一个很好的解决方案?

3 个答案:

答案 0 :(得分:4)

Height属性是TextBox的初始高度。 ActualHeight表示在屏幕上绘制的TextBox的高度。所以你的绑定变成了:

<TextBox FontSize="{Binding Path=ActualHeight, RelativeSource={RelativeSource Self}, Converter={StaticResource HeightToFontSizeConverter}}" Text="12345" />

请注意,我使用了转换器,因为HeightFontSize的比率不是1:1且文字对于TextBox来说太大了:

class HeightToFontSizeConverter : IValueConverter {

  public object Convert(object value, Type targetType, object parameter, CultureInfo culture) {
    var height = (double) value;
    return .65 * height;
  }

  public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) {
    throw new NotImplementedException();
  }

}

答案 1 :(得分:3)

一个简单的Viewbox可以解决这个问题,但也有问题。

请参阅此回复.. How to relative scale size of User Control?

我赞成转换器方法,如Julien的回复。

答案 2 :(得分:0)

我刚做了一个快速测试。如果我将Text的{​​{1}}属性绑定到包含网格的TextBox,则结果为Width。这可能是你的绑定失败的原因。

如果我将NaN的{​​{1}}属性绑定到FontSize属性,则绑定正常,并且还会使用网格调整大小。虽然字体很大。你可能需要一些转换器来使TextBox更小。

ActualWidth