Viewbox内でTextWrappingを設定した場合に折り返しをしたい
WPFアプリケーションにてViewboxを使用し文字列(TextBlockやTextBox)を縮小表示しようとしています。
文字数が少なかったり、改行コードが適当な位置に挿入されている場合は期待どおりに縮小されます。(下イメージの①・②)
ですが1行の文字数が大きい場合だと、折り返しが行われず1行にすべてが収まるよう縮小されてしまいます。
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="400" Width="400">
<Grid>
<Grid.Resources>
<Style TargetType="Border">
<Setter Property="Margin" Value="10" />
<Setter Property="BorderBrush" Value="Black" />
<Setter Property="BorderThickness" Value="1" />
</Style>
<Style TargetType="Viewbox">
<Setter Property="StretchDirection" Value="DownOnly" />
<Setter Property="VerticalAlignment" Value="Top" />
<Setter Property="HorizontalAlignment" Value="Left" />
</Style>
<Style TargetType="TextBlock">
<Setter Property="FontSize" Value="20" />
<Setter Property="TextWrapping" Value="Wrap" />
</Style>
</Grid.Resources>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<TextBlock Grid.Row="0" VerticalAlignment="Center" Text="①" />
<Border Grid.Row="0" Grid.Column="1">
<Viewbox>
<TextBlock>
標準サイズ
</TextBlock>
</Viewbox>
</Border>
<TextBlock Grid.Row="1" VerticalAlignment="Center" Text="②" />
<Border Grid.Row="1" Grid.Column="1">
<Viewbox>
<TextBlock>
表示領域にあわせて
<LineBreak />
縮小された
<LineBreak />
サイズ
<LineBreak />
です。
</TextBlock>
</Viewbox>
</Border>
<TextBlock Grid.Row="2" VerticalAlignment="Center" Text="③" />
<Border Grid.Row="2" Grid.Column="1">
<Viewbox>
<TextBlock>
ああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああ
<LineBreak />
いいいいいいいいいいいい
<LineBreak />
ううううううううううううううううううううううううううううううううう
</TextBlock>
</Viewbox>
</Border>
<TextBlock Grid.Row="3" VerticalAlignment="Center" Text="④" />
<Border Grid.Row="3" Grid.Column="1" x:Name="bd">
<Viewbox>
<TextBlock Width="540">
ああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああ
<LineBreak />
いいいいいいいいいいいい
<LineBreak />
ううううううううううううううううううううううううううううううううう
</TextBlock>
</Viewbox>
</Border>
</Grid>
TextBlockは縮小のみ行いたいため、ViewBoxのStretchDirectionをDownOnlyに。
字体のバランスを崩したくないため、Stretchは既定(Uniform)としています。
③のようになってしまうのが困っております。
④のようなイメージが期待値となりますが、④は適宜Widthを調整しています。
入力される文字数・改行位置などが想定できないため、XAML上でWidthを調整するのではなく内容に応じて自動で④のように縮小表示したいと考えております。
良い方法があれば是非アドバイスをお願いします。
XAMLファイルのサンプルコードが少々長くなってしまいました、ご容赦ください。
環境:Windows8.1 + .net framework 4.5.2