web-dev-qa-db-ja.com

WPF TextBlockフォントのサイズを変更して、グリッドの使用可能なスペースを埋めます

実行時にテキストブロックに表示されるテキストがあります。フォントサイズは、指定された領域を埋めるためにできる限り大きくする必要があります。私は正しく「自動サイズ調整」するようにテキストブロックを設定しており、テキストブロックがその親よりも大きくなるまでフォントサイズを増やしてから、フォントサイズを1だけ小さくしようとしています。問題は、コントロールを再描画/サイズを再計算します。

それを行うためのより良い方法ですか?または、メソッドを機能させる方法はありますか?

49
Nate Zaugg

TextBlock内にViewBoxをラップします。

   <Grid>
    <Viewbox>
        <TextBlock TextWrapping="Wrap" Text="Some Text" />
    </Viewbox>
   </Grid>
70
Jobi Joy

同じ問題がありました。これを使用してresizefontsizetextblockoverflowがある場合に領域を埋めることができます。


<Viewbox StretchDirection="DownOnly" Stretch="Uniform">
    <TextBlock Text="{Binding Path=Title}" HorizontalAlignment="Center"/>
</Viewbox>

27

ViewBoxを使用してこれを行う素晴らしい方法を見つけました。

 <Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="*" />
        <RowDefinition Height="Auto" />
        <RowDefinition Height="*" />
        <RowDefinition Height="50" />
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*" />
        <ColumnDefinition Width="100" />
    </Grid.ColumnDefinitions>
    <Viewbox Grid.Row="0" Grid.Column="0" Stretch="Uniform">
        <TextBlock Name="tbTest" Background="Yellow" Text="This is some text" />    
    </Viewbox>

    <ContentControl Grid.Column="0" Grid.Row="2">
        <TextBlock>This is some text</TextBlock>
    </ContentControl>
</Grid>
8
Nate Zaugg

WPF ViewBoxコントロールは、そのコンテンツとともに使用可能なスペースまで拡大/縮小できます。

TextBlock内にViewBoxを置くだけです。

<Viewbox Stretch="Uniform" Width="50" Height="50">
    <TextBlock Text="Test" />
</Viewbox>

ViewBoxは通常、コンテナによってスケーリングされます。

7
Sajin

まあ、それは「完璧な」答えではありませんが、これは簡単なハックです(これをkaxamlにドロップしてテストできます)。

<Page
  xmlns="http://schemas.Microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.Microsoft.com/winfx/2006/xaml">
  <Grid Height="300" Background="green">  
  <Viewbox>
  <TextBlock Background="red" Text="Hurr"/>
  </Viewbox>
  </Grid>
</Page>

ViewBoxは、コンテナに合わせてコンテンツを拡大します。問題は、TextBlockがそのテキストに合わせてサイズを調整しているにもかかわらず、上下にパディングがあり、それを取り除くことができないことです(多少の手間をかけずに)。これにより、あなたが望むものに近づくことができます。

3
Will

確実にラッピングするには、MaxWidthMaxHeightおよび/またはTextBlockを設定する必要があります

<Viewbox StretchDirection="DownOnly" Stretch="Uniform">
      <TextBlock  MaxWidth="500" TextWrapping="Wrap" FontSize="30" VerticalAlignment="Center"
                  Text="Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."/>
2
reti