Изменить размер шрифта в TextBox в сетке

На мой вопрос ниже дан ответ, но я только что понял, что теперь FontSize изменяется только в одном направлении.

Есть ли возможность связать два пути? Или другой вариант?

Предыдущий вопрос У меня есть Grid [20,20] с TextBoxes в нем. В эти TextBoxe я ставлю числа. Когда приложение запускается, оно полноэкранное. Если я изменяю размер окна, размер Grid с TexBoxes также изменяется. Но Font остается прежним. Поэтому я хочу изменить FontSize при изменении размера окна. Я старался:

 FontSize="{Binding ElementName=aTextBox, Path=Height}"

между тегами TextBox. Но это не работает. Привязка с Grid или Window со свойством Height или Width тоже не работала. При привязке к ползунку FontSize меняется в зависимости от значения ползунка. У кого-нибудь есть хорошее решение?


person user172701    schedule 13.09.2009    source источник


Ответы (3)


Свойство Height — это начальная высота TextBox. ActualHeight представляет собой высоту TextBox, отображаемую на экране. Таким образом, ваша привязка становится:

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

Обратите внимание, что я использовал конвертер, потому что соотношение Height к FontSize не равно 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();
  }

}
person Julien Poulin    schedule 13.09.2009

Простой Viewbox мог бы помочь, но есть проблемы.

Обратитесь к этому ответу. Пользовательский контроль?

Я за подход преобразователя, как в ответе Жюльена.

person Trainee4Life    schedule 13.09.2009

Я только что сделал быстрый тест. Если я привяжу свойство Text объекта TextBox к свойству Width содержащей сетки, результатом будет NaN. Это, вероятно, будет причиной сбоя вашей привязки.

Если вместо этого я привяжу свойство FontSize свойства TextBox к свойству ActualWidth, привязка будет в порядке, а также изменится размер сетки. Хотя шрифт огромный. Вам, вероятно, понадобится конвертер, чтобы уменьшить размер FontSize.

  <Grid x:Name="myGrid">
      <TextBox Text="Hello" FontSize="{Binding ElementName=myGrid, Path=ActualWidth}"/>
  </Grid>
person Peter van der Heijden    schedule 13.09.2009