Files
HandyControl/Net35/HandyControl_Net35/Controls/Input/WatermarkTextBox.cs
T
2019-01-21 00:43:10 +08:00

77 lines
2.1 KiB
C#

using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
namespace HandyControl.Controls
{
[TemplatePart(Name = ElementContentName, Type = typeof(ContentControl))]
public class WatermarkTextBox : TextBox
{
#region Constants
private const string ElementContentName = "PART_Watermark";
#endregion Constants
#region Data
private ContentControl _elementContent;
#endregion Data
#region Public Properties
#region Watermark
public static readonly DependencyProperty WatermarkProperty = DependencyProperty.Register(
"Watermark", typeof(object), typeof(WatermarkTextBox), new PropertyMetadata(default(object), OnWatermarkChanged));
private static void OnWatermarkChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var ctl = (WatermarkTextBox) d;
ctl.OnWatermarkChanged();
}
public object Watermark
{
get => GetValue(WatermarkProperty);
set => SetValue(WatermarkProperty, value);
}
#endregion Watermark
#endregion Public Properties
public override void OnApplyTemplate()
{
base.OnApplyTemplate();
_elementContent = GetTemplateChild(ElementContentName) as ContentControl;
_elementContent?.SetBinding(ContentControl.ContentProperty, new Binding(WatermarkProperty.Name) {Source = this});
OnWatermarkChanged();
}
private void OnWatermarkChanged()
{
if (_elementContent == null) return;
if (Watermark is Control watermarkControl)
{
watermarkControl.IsTabStop = false;
watermarkControl.IsHitTestVisible = false;
}
}
protected override void OnGotFocus(RoutedEventArgs e)
{
base.OnGotFocus(e);
if (IsEnabled)
{
if (!string.IsNullOrEmpty(Text))
{
Select(0, Text.Length);
}
}
}
}
}