通过Blend查看TextBox原有样式
分析 ControlTemplate 可知 TextBox由 ScrollViewer 外加边框组成
如何控制Border圆角?我们知道TextBox的宽高都有依赖属性控制,但并没有控制Border圆角的依赖属性,因此我们需要为其增加控制圆角的依赖属性
public static readonly DependencyProperty CornerRadiusProperty = DependencyProperty.Register("CornerRadius", typeof(CornerRadius), typeof(MTextBox),
new PropertyMetadata(new CornerRadius(0)));
/// <summary>
/// CornerRadius 圆角
/// </summary>
public CornerRadius CornerRadius
{
get => (CornerRadius)GetValue(CornerRadiusProperty);
set => SetValue(CornerRadiusProperty, value);
}
Xaml中需要增加依赖属性绑定
增加水印可以在原有的 ScrollViewer 上增加一层文本遮罩可以使用TextBlock 调整样式代码如下
此时遮罩已加好,但我们还要控制水印的显示,当有文本时不显示水印,当无文本时显示水印,此时需要使用触发器判断Text属性 如下
增加依赖属性Water
public static readonly DependencyProperty WatermarkProperty = DependencyProperty.Register("Watermark", typeof(string), typeof(MTextBox));
/// <summary>
/// Watermark 水印
/// </summary>
public string Watermark
{
get => (string)GetValue(WatermarkProperty);
set => SetValue(WatermarkProperty, value);
}
xaml增加绑定
增加依赖属性Icon用于Image绑定
public static readonly DependencyProperty IconProperty = DependencyProperty.Register("Icon", typeof(BitmapImage), typeof(MTextBox),
new PropertyMetadata(null));
/// <summary>
/// Icon 图标
/// </summary>
public BitmapImage Icon
{
get => (BitmapImage)GetValue(IconProperty);
set => SetValue(IconProperty, value);
}
继续调整模板样式增加Image
当无Icon时应使图片不占用位置,故增加属性触发器处理
TextBox增加阴影处理,默认状态透明度为0
增加属性触发器
当isFocused为True时使阴影Opacity为1,此处增加StoryBoard 使Opacity显示变化平滑一些
gitee地址:https://gitee.com/sirius_machao/Cys_Controls/tree/dev/
手机扫一扫
移动阅读更方便
你可能感兴趣的文章