Cys_Control(三) MTextBox
阅读原文时间:2023年07月11日阅读:3

通过Blend查看TextBox原有样式

分析 ControlTemplate 可知 TextBox由 ScrollViewer 外加边框组成

  

1、增加圆角控制

如何控制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中需要增加依赖属性绑定

2、增加水印

增加水印可以在原有的 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增加绑定

3、增加ICON

增加依赖属性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时应使图片不占用位置,故增加属性触发器处理


4、增加选中效果

TextBox增加阴影处理,默认状态透明度为0

增加属性触发器

当isFocused为True时使阴影Opacity为1,此处增加StoryBoard 使Opacity显示变化平滑一些

gitee地址:https://gitee.com/sirius_machao/Cys_Controls/tree/dev/