[WPF] TextBoxにPlaceholderを追加する
Placeholderをつけてくれーと言われて、添付プロパティを用意したのでメモ。
できるだけ簡易的に。
添付プロパティ
using System.Windows; using System.Windows.Controls; using System.Windows.Media; public static class TextBoxHelper { public static readonly DependencyProperty PlaceholderProperty = DependencyProperty.RegisterAttached( "Placeholder", typeof(string), typeof(TextBoxHelper), new PropertyMetadata(string.Empty, OnPlaceholderChanged)); public static string GetPlaceholder(DependencyObject obj) { return (string)obj.GetValue(PlaceholderProperty); } public static void SetPlaceholder(DependencyObject obj, string value) { obj.SetValue(PlaceholderProperty, value); } public static void OnPlaceholderChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e) { if (obj is TextBox textBox) { textBox.Loaded += (sender, args) => ShowPlaceholder(textBox); textBox.GetFocus += (sender, args) => HidePlaceholder(textBox); textBox.LostFocus += (sender, args) => ShowPlaceholder(textBox); } } private static void ShowPlaceholder(TextBox textBox) { if (string.IsNullOrEmpty(textBox.Text)) { textBox.Text = GetPlaceholder(textBox); textBox.Foreground = Brushes.Gray; } } private static void HidePlaceholder(TextBox textBox) { if (textBox.Text == GetPlaceholder(textBox)) { textBox.Text = string.Empty; textBox.Foreground = Brushes.Black; } } }
使い方
Xaml側でTextBoxへ添付プロパティを設定して動作させます。
<TextBox local:TextBoxHelper.Placeholder="sample text" />
参考資料
おしまい。
ディスカッション
コメント一覧
まだ、コメントがありません