经常做信息编辑界面的时候遇到需要水印功能,还有错误信息显示,必填项显示等功能.没有统一的样式规范很麻烦。正好最近调整界面,在网上查找了些资料,自己写了一个TextBox控件,带有水印功能,是否必填项,以及错误信息的显示.
我语言组织不行,直接上代码
界面代码
<UserControl x:Class="TextBoxEdit.SelfWateMarkTextbox"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d" >
<Grid>
<StackPanel Orientation="Horizontal" Height="35">
<Label Name="IsInput" Foreground="Red" VerticalContentAlignment="Center" HorizontalContentAlignment="Center" Width="20">*</Label>
<TextBox VerticalContentAlignment="Center" Width="300" Height="25" x:Name="textBox1" />
<Border Name="IsErrorShowBorder" BorderThickness="1" Height="27" CornerRadius="15" Visibility="Hidden">
<Label Name="IsError" Foreground="Red" Background="LightPink" VerticalContentAlignment="Center" HorizontalContentAlignment="Center">错误信息</Label>
</Border>
<TextBox VerticalContentAlignment="Center" Text="{Binding IsErroShow}" Height="25" x:Name="txtErrorShow" Visibility="Hidden"/>
</StackPanel>
</Grid>
</UserControl>
后台代码
private const string defaultText = "";
private const string IsInputText = "";
private const string IsErrorText = "";
public SelfWateMarkTextbox()
{
InitializeComponent();
this.Loaded += new RoutedEventHandler(WateMarkTextbox_Loaded);
this.GotFocus += new RoutedEventHandler(WateMarkTextbox_GotFocus);
this.LostFocus += new RoutedEventHandler(WateMarkTextbox_LostFocus);
this.textBox1.TextChanged += new TextChangedEventHandler(TextBox1_TextChanged);
this.txtErrorShow.TextChanged += new TextChangedEventHandler(txtErrorShow_TextChanged);
}
void txtErrorShow_TextChanged(object sender, TextChangedEventArgs e)
{
if (!string.IsNullOrWhiteSpace(this.txtErrorShow.Text) && txtErrorShow.Text.ToLower() == "true")
{
IsErrorShowBorder.Visibility = Visibility.Visible;
}
else
{
IsErrorShowBorder.Visibility = Visibility.Hidden;
}
}
void TextBox1_TextChanged(object sender, TextChangedEventArgs e)
{
if (!string.IsNullOrWhiteSpace(this.textBox1.Text) || this.textBox1.IsFocused)
{
this.textBox1.Text = this.textBox1.Text;
}
else
{
this.textBox1.Text = Watermark;
}
}
void WateMarkTextbox_LostFocus(object sender, RoutedEventArgs e)
{
if (string.IsNullOrEmpty(this.textBox1.Text))
{
this.textBox1.Text = string.Empty;
}
}
void WateMarkTextbox_GotFocus(object sender, RoutedEventArgs e)
{
if (this.textBox1.Text.Equals(Watermark))
{
this.textBox1.Text = string.Empty;
}
}
void WateMarkTextbox_Loaded(object sender, RoutedEventArgs e)
{
this.textBox1.Text = Watermark;
this.IsInput.Content = IsRequired;
this.IsError.Content = IsErrorMessage;
}
public string Watermark
{
get
{
string result = (string)GetValue(WatermarkProperty);
if (string.IsNullOrEmpty(result))
{
result = defaultText;
}
return result;
}
set { SetValue(WatermarkProperty, value); }
}
public string IsRequired
{
get
{
string result = (string)GetValue(IsRequiredProperty);
if (string.IsNullOrEmpty(result))
{
result = IsInputText;
}
return result;
}
set { SetValue(IsRequiredProperty, value); }
}
public string IsErrorMessage
{
get
{
string result = (string)GetValue(IsErrorMessageProperty);
if (string.IsNullOrEmpty(result))
{
result = IsErrorText;
}
return result;
}
set { SetValue(IsErrorMessageProperty, value); }
}
public string IsErrorShow
{
set
{
txtErrorShow.Text = null;
txtErrorShow.Text = value;
}
}
readonly DependencyProperty WatermarkProperty =
DependencyProperty.Register("Watermark", typeof(string), typeof(SelfWateMarkTextbox), new UIPropertyMetadata(defaultText));
public static readonly DependencyProperty IsRequiredProperty =
DependencyProperty.Register("IsRequired", typeof(string), typeof(SelfWateMarkTextbox), new UIPropertyMetadata(IsInputText));
public static readonly DependencyProperty IsErrorMessageProperty =
DependencyProperty.Register("IsErrorMessage", typeof(string), typeof(SelfWateMarkTextbox), new UIPropertyMetadata(IsErrorText));
MainWindow界面调用代码
<my:SelfWateMarkTextbox x:Name="wateMarkTextbox1" VerticalAlignment="Top" IsRequired="*" Watermark="请输入姓名" IsErrorMessage="请输入正常的姓名" Height="35" />
<Button Content="确定" Height="23" Width="120" Click="Button_Click"></Button>
MainWindow界面后台代码
private void Button_Click(object sender, RoutedEventArgs e) { wateMarkTextbox1.IsErrorShow = "true"; }
最终效果
输入时
错误信息显示
根据杨友山大大编写的,感谢杨友山大大的提供
http://blog.csdn.net/yysyangyangyangshan/article/details/9413237