博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WPF 自定义TextBox带水印控件,可设置圆角
阅读量:6114 次
发布时间:2019-06-21

本文共 5105 字,大约阅读时间需要 17 分钟。

一、简单设置水印TextBox控件,废话不多说看代码:

这里的style可以单独提出来,方便多处使用。

设置之后的效果如下:

二、扩展增强TextBox

有的时候会碰到TextBox里面需要添加按钮,或者TextBox需要设置圆角。这个时候就需要添加自定义控件,添加依赖属性来扩展功能了。

2.1 添加自定义控件TextBoxEx

代码如下:

public class TextBoxEx : TextBox    {        static TextBoxEx()        {            DefaultStyleKeyProperty.OverrideMetadata(typeof(TextBoxEx), new FrameworkPropertyMetadata(typeof(TextBoxEx)));        }        public TextBoxEx()        {            CommandBindings.Add(new CommandBinding(SearchClickCommand, delegate            {                SearchClick?.Invoke(this, null);            }));        }        public static RoutedUICommand SearchClickCommand = new RoutedUICommand(nameof(SearchClickCommand), nameof(SearchClickCommand), typeof(RoutedUICommand));        public event EventHandler SearchClick;        public string WaterMark        {            get { return (string)GetValue(WaterMarkProperty); }            set { SetValue(WaterMarkProperty, value); }        }        public static readonly DependencyProperty WaterMarkProperty =            DependencyProperty.Register("WaterMark", typeof(string), typeof(TextBoxEx), new PropertyMetadata(null));        public ImageSource Icon        {            get { return (ImageSource)GetValue(IconProperty); }            set { SetValue(IconProperty, value); }        }        public static readonly DependencyProperty IconProperty =            DependencyProperty.Register("Icon", typeof(ImageSource), typeof(TextBoxEx), new PropertyMetadata(null));        public new Brush BorderBrush        {            get { return (Brush)GetValue(BorderBrushProperty); }            set { SetValue(BorderBrushProperty, value); }        }        public static readonly new DependencyProperty BorderBrushProperty =            DependencyProperty.Register("BorderBrush", typeof(Brush), typeof(TextBoxEx), new PropertyMetadata(new SolidColorBrush(Color.FromRgb(234,234,234))));        public Brush MouseOverBorderBrush        {            get { return (Brush)GetValue(MouseOverBorderBrushProperty); }            set { SetValue(MouseOverBorderBrushProperty, value); }        }        public static readonly DependencyProperty MouseOverBorderBrushProperty =            DependencyProperty.Register("MouseOverBorderBrush", typeof(Brush), typeof(TextBoxEx), new PropertyMetadata(new SolidColorBrush(Color.FromRgb(79,173,216))));        public new Brush Background        {            get { return (Brush)GetValue(BackgroundProperty); }            set { SetValue(BackgroundProperty, value); }        }        public static readonly new DependencyProperty BackgroundProperty =            DependencyProperty.Register("Background", typeof(Brush), typeof(TextBoxEx), new PropertyMetadata(new SolidColorBrush(Color.FromRgb(106,103,90))));        public Brush MouseOverBackground        {            get { return (Brush)GetValue(MouseOverBackgroundProperty); }            set { SetValue(MouseOverBackgroundProperty, value); }        }        public static readonly DependencyProperty MouseOverBackgroundProperty =            DependencyProperty.Register("MouseOverBackground", typeof(Brush), typeof(TextBoxEx), new PropertyMetadata(Color.FromRgb(106,103,90)));        public CornerRadius CornerRadius        {            get { return (CornerRadius)GetValue(CornerRadiusProperty); }            set { SetValue(CornerRadiusProperty, value); }        }        public static readonly DependencyProperty CornerRadiusProperty =            DependencyProperty.Register("CornerRadius", typeof(CornerRadius), typeof(TextBoxEx), new PropertyMetadata(new CornerRadius(0)));        public IconDirection IconDirection        {            get { return (IconDirection)GetValue(IconDirectionProperty); }            set { SetValue(IconDirectionProperty, value); }        }        public static readonly DependencyProperty IconDirectionProperty =            DependencyProperty.Register("IconDirection", typeof(IconDirection), typeof(TextBoxEx), new PropertyMetadata(IconDirection.Right));    }    public enum IconDirection    {        Left,        Right    }

 

2.2 设置TextBoxEx样式

这里面使用了一个转换器cornerRadiusToThickness,转换器的作用是当TextBox设置了圆角之后,保证TextBox里的内容不溢出圆角。WPF转换器的使用大家可以百度。

转换器的内容如下:

public class CornerRadiusToThickness : IValueConverter    {        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)        {            Thickness result = new Thickness(0);            if (value is CornerRadius)            {                var tem = (CornerRadius)value;                result = new Thickness(tem.TopLeft, 0, tem.TopRight, 0);            }            return result;        }        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)        {            throw new NotImplementedException();        }    }

另外为了触发TextBox按钮的单击事件,添加了这个两个dll文件引用,Microsoft.Expression.Interactions.dll和System.Windows.Interactivity.dll。

在顶部定义 xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"

2.3 引用方法

 

转载于:https://www.cnblogs.com/xiaomingg/p/8719577.html

你可能感兴趣的文章
MultiRow发现之旅(七)- 套打和打印
查看>>
Windows Forms 2.0 Programming 花边(002)——失算!第一章的下马威
查看>>
《WCF技术内幕》翻译12:第1部分_第2章_面向服务:概念汇总
查看>>
Java2Html使用详解
查看>>
C#字符串与字节数组互转
查看>>
Linux下Apache与MySQL+PHP的综合应用案例
查看>>
使用多级分组报表展现分类数据
查看>>
cocos2d-x中Node与Node层级架构
查看>>
2月第3周回顾:黑帽大会华府召开 场面热闹创新不多
查看>>
VB 6.0中判断是否Access 2010中存在指定表格
查看>>
流水线上的思考——异步程序开发模型(1)
查看>>
为SharePoint网站创建自定义导航菜单
查看>>
分布式系统的Raft算法——在失联阶段这个老Leader的任何更新都不能算commit,都回滚,接受新的Leader的新的更新 意味着还是可能丢数据!!!...
查看>>
检查点(Checkpoint)过程如何处理未提交的事务
查看>>
iphone开发中的手势操作:Multiple Taps
查看>>
牛刀小试Oracle之FRA学习
查看>>
Azure SQL Database (21) 将整张表都迁移到Azure Stretch Database里
查看>>
jquery autocomplete实现读取sql数据库自动补全TextBox
查看>>
前端构建工具gulp入门教程(share)
查看>>
springmvc原理
查看>>