WPF
AsciiArt

[WPF][アスキーアート] AA向けにTextBoxのフォント表示設定を行う方法

WPFでアスキーアート向けのツールを作成する際の小ネタです。

表示サンプル

もしアスキーアート向けツールを作成したい場合に、最初につまずきそうなのはフォント表示設定かと思います。アスキーアートは発祥の2chの掲示板仕様に強く依存しており、表示設定をそれにきっちり合わせる必要があります。以下はデフォルトの表示と、アスキーアート表示向けに設定したTextBoxの例になります。

image.png

上は線がズレズレですが、下はきっちり表示されていますね。

実装例

AA向けフォント設定
<Window x:Class="WpfApp1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp1"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
        <Label Grid.Row="0">通常</Label>
        <TextBox Grid.Row="1"
                 HorizontalAlignment="Stretch"
                 VerticalAlignment="Stretch"
                 TextWrapping="NoWrap"
                 AcceptsReturn="True"
                 Foreground="Black" />
        <Label Grid.Row="2">AA用に修正</Label>
        <TextBox Grid.Row="3"
                 HorizontalAlignment="Stretch"
                 VerticalAlignment="Stretch"
                 TextOptions.TextFormattingMode="Display"
                 TextOptions.TextRenderingMode="Aliased"
                 TextOptions.TextHintingMode="Fixed"
                 TextWrapping="NoWrap"
                 FontFamily="MS PGothic"
                 FontSize="12pt"
                 TextBlock.LineHeight="18px"
                 AcceptsReturn="True"
                 Foreground="Black" />
    </Grid>
</Window>

上記はTextBoxを使用していますが、TextBlockでも同様の設定で問題ありません。

表示仕様

標準仕様

標準的な表示仕様としては以下になります。

設定名 概要 設定値 備考
FontFamily フォント種別 MS PGothic
FontSize フォントサイズ 12pt(16px)
TextBlock.LineHeight 行の高さ 18px 行間2px

フォントはその他AA向けフォントでも構いません。

WPF固有の設定

以下はWPFの場合に設定が必要な項目です。
必須なのは TextFormattingMode="Display" で、これを明示的に設定しないと表示時にずれてしまいます。

TextOptions.TextFormattingMode="Display"
TextOptions.TextRenderingMode="Aliased"
TextOptions.TextHintingMode="Fixed"

普段は文字がきれいに表示されるために役立つ設定ですが、アスキーアート向けだと文字がずれたりぼやけたりするので望ましくありません。

参考:

まとめ

小ネタでしたが以上です。フォントまわりはなかなかやっかいですね・・・。