2013-09-04 5 views
0

У меня есть панель с несколькими TextBlock s. Я хочу изменить эту панель таким образом, чтобы размер шрифта каждого TextBlock изменялся в зависимости от размера панели.WPF: Как реализовать панель с регулируемым размером шрифта?

Размер панели может меняться, когда пользователь меняет размер окна (например, максимизирует или восстанавливает его).

Я пытался сделать это с помощью Viewbox:

<Viewbox Stretch="Fill"> 
    <Grid Width="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Viewbox}}, Path=Width}"> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="Auto"/> 
     </Grid.RowDefinitions> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="Auto"/> 
      <ColumnDefinition Width="Auto"/> 
      <ColumnDefinition Width="Auto"/> 
      <ColumnDefinition Width="Auto"/> 
      <ColumnDefinition Width="Auto"/> 
     </Grid.ColumnDefinitions> 
     <TextBlock 
      HorizontalAlignment="Stretch" 
      VerticalAlignment="Stretch" /> 
     <TextBlock 
      HorizontalAlignment="Stretch" 
      VerticalAlignment="Stretch" /> 
     <TextBlock 
      HorizontalAlignment="Stretch" 
      VerticalAlignment="Stretch" /> 
     <TextBlock 
      HorizontalAlignment="Stretch" 
      VerticalAlignment="Stretch" /> 
     <TextBlock 
      HorizontalAlignment="Stretch" 
      VerticalAlignment="Stretch" /> 
     <TextBlock 
      HorizontalAlignment="Stretch" 
      VerticalAlignment="Stretch" />   
    </Grid> 
</Viewbox> 

Но это не работает, потому что

  • размер шрифта не становится больше, когда размер Viewbox увеличивается и
  • не уменьшается, когда размер Viewbox уменьшается.

Как реализовать масштабирование этих текстовых блоков (чтобы они заполнили всю доступную область и адаптировали их размеры шрифта)?

+0

вам нужно масштабировать и против высоты и ширины одновременно делать? –

+0

В идеале - да, но масштабирование только по ширине достаточно. –

+0

У меня была такая же проблема, и в итоге я создал стиль Textbox, привязанный к масштабирующему конвертеру. Но он использовал только ширину. –

ответ

1

Вы ширина авто и вы не размещая TextBlocks в сетке

<Grid> 
    <Viewbox Stretch="Fill"> 
     <Grid Width="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Viewbox}}, Path=Width}"> 
      <Grid.RowDefinitions> 
       <RowDefinition Height="*"/> 
      </Grid.RowDefinitions> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="*"/> 
       <ColumnDefinition Width="*"/> 
       <ColumnDefinition Width="*"/> 
      </Grid.ColumnDefinitions> 
      <TextBlock Grid.Column="0" Text="TextBlock1" 
       HorizontalAlignment="Stretch" 
       VerticalAlignment="Stretch" /> 
      <TextBlock Grid.Column="1" Text="TextBlock2" 
       HorizontalAlignment="Stretch" 
       VerticalAlignment="Stretch" /> 
      <TextBlock Grid.Column="2" Text="TextBlock3" 
       HorizontalAlignment="Stretch" 
       VerticalAlignment="Stretch" /> 
     </Grid> 
    </Viewbox> 
</Grid> 
0

A Viewbox работа ... это почти все для. Попробуйте этот простой пример:

<Window x:Class="WpfApplication1.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Height="350" Width="525"> 
    <Viewbox Stretch="Fill"> 
     <TextBlock Text="This will change size" FontSize="40" /> 
    </Viewbox> 
</Window> 

Я думаю, что проблема в том, что вы не установили первоначальный FontSize быть достаточно большим, и ваш режим Stretch был не прав. Если этот пример не подходит для ваших требований, попробуйте использовать другой режим Stretch.

 Смежные вопросы

  • Нет связанных вопросов^_^