WPF自定义控件(二)——TextBox
2020-12-13 15:29
标签:style blog http io color ar os for sp 和之前一样,先来看看效果: 这个TextBox可设置水印,可设置必填和正则表达式验证。 验证?没错,就是验证! 就是在输入完成后,控件一旦失去焦点就会自动验证!会根据我开放出来的“是否可以为空”属性进行验证,一旦为空,则控件变为警告样式。 但这还不是最特别的,为了各种手机号啊,邮箱啊的验证,我还开放了一个正则表达式的属性,在这个属性中填上正则表达式,同上, 一旦失去焦点就会自动验证输入的内容能否匹配正则表达式,如果不能匹配,则控件变为警告样式。 之后,代码还可以通过我开放的另一个属性来判断当前输入框的输入是否有误! 好了,来看代码吧: 再来看看CS: 怎么样?还算不错吧!我觉得这个控件的用处算是最大的了!用上这个和上一篇的Button基本可以完成很多WPF项目了! 不过~好像还少了个主窗体!没错!下一篇就来说说怎么自定义主窗体! 有疑问的多留言哟! WPF自定义控件(二)——TextBox 标签:style blog http io color ar os for sp 原文地址:http://www.cnblogs.com/QinYK/p/4075072.html 1 ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
2 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
3 xmlns:ctrl="clr-namespace:KAN.WPF.XCtrl.Controls">
4 Style TargetType="{x:Type ctrl:XTextBox}">
5
6 Style.Resources>
7 ResourceDictionary Source="/KAN.WPF.Xctrl;component/Themes/CommonStyle.xaml"/>
8 Style.Resources>
9 Setter Property="FocusVisualStyle" Value="{StaticResource StyleFocusVisual}"/>
10 Setter Property="BorderBrush" Value="Silver"/>
11 Setter Property="BorderThickness" Value="1"/>
12 Setter Property="Template">
13 Setter.Value>
14 ControlTemplate TargetType="{x:Type ctrl:XTextBox}">
15 Border Name="brdText" Background="{TemplateBinding Background}" BorderThickness="{TemplateBinding BorderThickness}"
16 BorderBrush="{TemplateBinding BorderBrush}" SnapsToDevicePixels="true" Padding="2">
17 Grid>
18 ScrollViewer x:Name="PART_ContentHost" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
19 StackPanel Orientation="Horizontal" Visibility="Collapsed" Name="stpWatermark">
20 TextBlock HorizontalAlignment="Left" VerticalAlignment="Center"
21 FontSize="{TemplateBinding FontSize}" FontFamily="{TemplateBinding FontFamily}"
22 Foreground="{Binding XWmkForeground, RelativeSource={RelativeSource TemplatedParent}}"
23 Text="{Binding XWmkText, RelativeSource={RelativeSource TemplatedParent}}" Cursor="IBeam" />
24 StackPanel>
25 ContentPresenter>ContentPresenter>
26 Grid>
27 Border>
28 ControlTemplate.Triggers>
29
30 MultiTrigger>
31 MultiTrigger.Conditions>
32 Condition Property="Text" Value=""/>
33 Condition Property="IsFocused" Value="False"/>
34 MultiTrigger.Conditions>
35 MultiTrigger.Setters>
36 Setter Property="Visibility" TargetName="stpWatermark" Value="Visible"/>
37 MultiTrigger.Setters>
38 MultiTrigger>
39
40 Trigger Property="XIsError" Value="true">
41 Setter TargetName="brdText" Property="BorderBrush" Value="Red" />
42 Setter TargetName="brdText" Property="Background" Value="Beige" />
43 Trigger>
44 ControlTemplate.Triggers>
45 ControlTemplate>
46 Setter.Value>
47 Setter>
48 Style>
49 ResourceDictionary>
1 using System;
2 using System.Windows;
3 using System.Windows.Controls;
4 using System.Windows.Media;
5 using System.Windows.Input;
6 using System.Text.RegularExpressions;
7
8 namespace KAN.WPF.XCtrl.Controls
9 {
10 ///