WPFアプリにおいて、SelectionBrushプロパティを使いテキストボックスやリッチテキストボックスの選択範囲の背景色を変更する方法を解説する。
対象:.NET 4.0以降
テキストボックスでテキストを選択するとその部分が強調表示(ハイライト)される。そのハイライト部分の背景色(正確には「前景」の色、後述)を変えたいと思ったことはないだろうか? 例えば、テキストボックスに背景色を設定したとき、その色によってはハイライトが見づらくなってしまう(次の画像)。ハイライトの色を変更できれば見やすくなるだろう。そこで本稿では、WPFのテキストボックスで選択された文字列のハイライト色を設定する方法を説明する。
TextBoxコントロール(System.Windows.Controls名前空間)のSelectionBrushプロパティを設定すればよい。また、透明度を指定するSelectionOpacityプロパティも、必要に応じて利用できる(後述)。なお、RichTextBoxコントロール(System.Windows.Controls名前空間)でも同様である。
SelectionBrushプロパティに単色を設定するには、次のコードのようにする。
<TextBox Foreground="LimeGreen" Background="Black" SelectionBrush="Yellow" ……省略…… />
すると、次の画像のような表示になる。
SelectionBrushプロパティはBrush型(System.Windows.Media名前空間)であるから、タイルブラシやグラデーションブラシなども設定できる。次のコードは、グラデーションブラシを設定する例だ。
<TextBox Foreground="LimeGreen" Background="Black" ……省略……>
<TextBox.SelectionBrush>
<LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1">
<GradientStop Color="Transparent"/>
<GradientStop Color="Transparent" Offset="0.5"/>
<GradientStop Color="Red" Offset="0.9"/>
<GradientStop Color="Red" Offset="1"/>
</LinearGradientBrush>
</TextBox.SelectionBrush>
</TextBox>
このグラデーションブラシを設定したハイライトは、次の画像のようになる。
テキストボックスのハイライトは、文字よりも「手前」に表示されている。
ハイライトは既定では半透明になっていて、ハイライトを透かす形で文字が見えているのだ。次のコードのようにSelectionOpacityプロパティに「1」を指定して、完全に不透明にしてみるとはっきりする。
<TextBox Foreground="LimeGreen" Background="Black" ……省略……
SelectionBrush="Yellow" SelectionOpacity="1"/>
すると、次の画像のように、選択した文字が完全に隠されてしまう。
なお、SelectionOpacityプロパティの既定値(指定しなかったときの値)は、筆者の調べた範囲では「0.4」であった。
冒頭に掲げた画像では、ハイライト色は薄い青色に見える。これは既定の色であるが、どこで設定されているのだろうか?
XAMLコードから参照するには、SystemColors.HighlightBrushKeyプロパティなどを使用する。実際に定義されている場所は、システムレジストリの「HKEY_CURRENT_USER\Control Panel\Colors」にある[Hilight]キーである(変更の反映には再起動が必要)。これは、Windows 7ではコントロールパネルから設定できる(次の画像)。ただし、画面をハイコントラストに切り替えた場合は、その設定が優先される。
利用可能バージョン:.NET Framework 4.0以降
カテゴリ:WPF/XAML 処理対象:TextBoxコントロール
使用ライブラリ:TextBoxコントロール(System.Windows.Controls名前空間)
関連TIPS:WPF:テキストボックスのカーソルの色を変えるには?[XAML]
Copyright© Digital Advantage Corp. All Rights Reserved.