【VB.NET】【WPF】プログラムコードでウォーターマーク(Watermark)を付ける

WPF でウォーターマーク(Watermark、透かし、淡色テキスト)を付ける方法をネット検索すると、ヒットするのはほとんど xaml を編集するやり方だと思いますが、ここではプログラムコードによる方法をご紹介します。

なるべく分かりやすいシンプルな方法で・・・と思って検討した結果、TextBox の新規コントロールのインスタンスを作ってそこにウォーターマークを表示して、それを対象コントロールの上に重ねる方法に落ち着きました(ぴったり重ねたい対象コントロールは TextBox か ComboBox なので、それに重ねるコントロールも TextBox が相性が良い)。

対応している対象コントロールは TextBox、ComboBox(IsEditable = True)、ListBox、ListView です。

こんな感じ。

Watermark

コントロールにフォーカスが移るか、値が入ると(パスワードのウォーターマークを除いて)ウォーターマークが消えます。

パスワードのウォーターマークは、ボックスにキャレットを入れたとき(フォーカスしたとき)のみ、値が表示されるようにしました。

 

各コントロールにウォーターマークを付けるコードはこんな感じ。

Call SetWatermark(oTargetControl:=Me.ComboBox1, WaterMarkText:=" うぉーたーまーく")

で、SetWatermark 関数はこんな感じ(全コードを掲載すると、スマホで見たとき画面がフリーズするようなので、テキストファイルをダウンロードできるようにしました)。

 

ちなみに、参考までにですが、上記コードと同じことを xaml でやろうとすると、だいたい下記のようになります(上記ファイルの下のほうに記載しているのと同じもの)。

ただし、この記事はプログラムコードでの処理を主目的としたものなので、この xaml コードはあまり実用向きではないかもしれません(?)。

コメントの投稿

avatar
  購読する  
通知を受け取る対象