Изменить размер шрифта в TextBox в сетке - PullRequest
1 голос
/ 13 сентября 2009

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

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

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

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

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

Ответы [ 3 ]

4 голосов
/ 13 сентября 2009

Свойство 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();
  }

}
3 голосов
/ 13 сентября 2009

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

Обратитесь к этому ответу. Как определить размер шкалы пользовательского контроля?

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

0 голосов
/ 13 сентября 2009

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

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

  <Grid x:Name="myGrid">
      <TextBox Text="Hello" FontSize="{Binding ElementName=myGrid, Path=ActualWidth}"/>
  </Grid>
...