Масштабирование шрифта WPF

Таблицы были разработаны для табличного содержания, не для расположения.

Так, никогда не плохо себя чувствуйте при использовании их для отображения данных.

8
задан Martin 10 November 2009 в 12:27
поделиться

3 ответа

Попробуйте следующее: визуализируйте свои текстовые элементы, как если бы вы это делали в любое другое время:

  • TextBlock s, содержащийся в 'ItemsControl'?
  • ListBox ?

Поместите весь shebang в ViewBox и установите его масштаб, соответствующий твои нужды. Ищите свойства горизонтального, вертикального или комбинированного масштабирования.

0
ответ дан 6 December 2019 в 04:41
поделиться

Это может помочь обходной путь:

    <ScrollViewer>
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="30*" MinHeight="30"/>
            <RowDefinition Height="30*" MinHeight="30"/>
            <RowDefinition Height="30*" MinHeight="30"/>
        </Grid.RowDefinitions>

        <Button Grid.Row="0" MaxHeight="100">
            <Viewbox>
                <TextBlock Width="{Binding ElementName=tbLonger,Path=ActualWidth}">T</TextBlock>
            </Viewbox>
        </Button>
        <Button Grid.Row="1" MaxHeight="100">
            <Viewbox>
                <TextBlock Width="{Binding ElementName=tbLonger,Path=ActualWidth}">Test</TextBlock>
            </Viewbox>
        </Button>
        <Button Grid.Row="2" MaxHeight="100">
            <Viewbox>
                <TextBlock Name="tbLonger">Test Longer String</TextBlock>
            </Viewbox>
        </Button>
    </Grid>
</ScrollViewer>

Ключ в том, чтобы установить для всех текстовых блоков одинаковую ширину. В этом случае все они следуют самому длинному текстовому блоку через привязку.

0
ответ дан 6 December 2019 в 04:41
поделиться

Самый простой способ, вероятно, состоит в создании декоратора для выполнения этой работы. Вы можете назвать его "VerticalStretchDecorator" или что-то в этом роде.

Вот как он будет использоваться:

<UniformGrid Rows="3" MaxHeight="300">
  <Button>
    <my:VerticalStretchDecorator>
      <TextBlock>T</TextBlock>
    </my:VerticalStretchDecorator>
  </Button> 
  <Button>
    <my:VerticalStretchDecorator>
      <TextBlock>Test</TextBlock>
    </my:VerticalStretchDecorator>
  </Button> 
  <Button>
    <my:VerticalStretchDecorator>
      <TextBlock>Test Longer String</TextBlock>
    </my:VerticalStretchDecorator>
  </Button>
</UniformGrid>

Я использовал UniformGrid вместо Grid, но он будет работать так же, как и Grid.

Это было бы реализовано примерно так:

public class VerticalStretchDecorator : Decorator
{
  protected override Size MeasureOverride(Size constraint)
  {
    var desired = base.Measure(constraint);
    if(desired.Height > constraint.Height || desired.Height==0)
      LayoutTransform = null;
    else
    {
      var scale = constraint.Height / desired.Height;
      LayoutTransform = new ScaleTransform(scale, scale); // Stretch in both directions
    }
  }
}
-1
ответ дан 6 December 2019 в 04:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: