潜移默化学会WPF(综合篇)--模板,样式,自定义控件,依赖性属性(提供一个水印文本框,自定义颜色方形border外观)(二) - AYUI框架 - 博客园...

原文: 潜移默化学会WPF(综合篇)--模板,样式,自定义控件,依赖性属性(提供一个水印文本框,自定义颜色方形border外观)(二) - AYUI框架 - 博客园

本文章不用于教学,不适合初学者,样式,模板,动画的学习,我会在以后写的

 

1.首先建一个继承 TextBox 的类,我取的类名叫  WaterTextBox    

复制代码
   public class WaterTextBox:TextBox
{

public string WatermarkText
{
get { return (string)GetValue(WatermarkTextProperty); }
set { SetValue(WatermarkTextProperty, value); }
}

public static readonly DependencyProperty WatermarkTextProperty =
DependencyProperty.Register("WatermarkText", typeof(string), typeof(WaterTextBox), new UIPropertyMetadata(""));


public Brush WatermarkBorderBrush
{
get { return (Brush)GetValue(WatermarkBorderBrushProperty); }
set { SetValue(WatermarkBorderBrushProperty, value); }
}

public static readonly DependencyProperty WatermarkBorderBrushProperty =
DependencyProperty.Register("WatermarkBorderBrush", typeof(Brush), typeof(WaterTextBox), new UIPropertyMetadata(new SolidColorBrush(Colors.Black)));
}
复制代码

自定义2个依赖性属性  (1个是水印文字属性       另一个是边框颜色)

 

接下来是样式和模板

 

复制代码
 <Style x:Key="JWaterTextBox" TargetType="{x:Type local:WaterTextBox}">
<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
<Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.WindowBrushKey}}"/>
<Setter Property="BorderBrush">
<Setter.Value>
<LinearGradientBrush EndPoint="0,20" MappingMode="Absolute" StartPoint="0,0">
<GradientStop Color="#FFABADB3" Offset="0.05"/>
<GradientStop Color="#FFE2E3EA" Offset="0.07"/>
<GradientStop Color="#FFE3E9EF" Offset="1"/>
</LinearGradientBrush>
</Setter.Value>
</Setter>
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="Padding" Value="1"/>
<Setter Property="AllowDrop" Value="True"/>
<Setter Property="FocusVisualStyle" Value="{x:Null}"/>
<Setter Property="ScrollViewer.PanningMode" Value="VerticalFirst"/>
<Setter Property="Stylus.IsFlicksEnabled" Value="False"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:WaterTextBox}">
<Microsoft_Windows_Themes:ListBoxChrome x:Name="Bd" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" RenderMouseOver="{TemplateBinding IsMouseOver}" RenderFocused="{TemplateBinding IsKeyboardFocusWithin}" SnapsToDevicePixels="True">
<Border x:Name="WBorder" BorderThickness="1" BorderBrush="{TemplateBinding WatermarkBorderBrush}" >
<Grid>
<ScrollViewer x:Name="PART_ContentHost" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalContentAlignment="Center" VerticalAlignment="Center"/>
<TextBlock x:Name="Watermark" Opacity="0.6" Margin="5,0,0,0" Text="{TemplateBinding WatermarkText}" TextWrapping="Wrap" TextTrimming="CharacterEllipsis" Visibility="Hidden" Foreground="{TemplateBinding Foreground}" VerticalAlignment="Center"/>
</Grid>
</Border>
</Microsoft_Windows_Themes:ListBoxChrome>
<ControlTemplate.Triggers>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsFocused" SourceName="Watermark" Value="False"/>
<Condition Property="Text" Value=""/>
</MultiTrigger.Conditions>
<Setter Property="Visibility" TargetName="Watermark" Value="Visible"/>
</MultiTrigger>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Background" TargetName="Bd" Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"/>
<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
复制代码


接下来就是用了

  

<ui:WaterTextBox KeyDown="txtName_KeyDown" Canvas.Top="1" Width="200" MaxLength="20" Canvas.Left="300" Height="30" WatermarkBorderBrush="#c8c8c9" x:Name="txtName" 
Style="{DynamicResource JWaterTextBox}" Foreground="Black" WatermarkText="请输入会员卡的卡号" BorderBrush="#c8c8c9" />

ui  是我页面引入命名空间的别名    xmlns:ui="clr-namespace:空间名称"

 

 

 

 

 


 

分类: WPF
0
0
« 上一篇: 潜移默化学会WPF(综合篇)--模板,样式,动画(提供一个很漂亮的色块按钮)(一)
» 下一篇: 一个开源的免费很炫可供学习的UI库 ----thinkpixellab-bot-v5.1.0-15
posted on 2019-03-01 22:22 NET未来之路 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/lonelyxmas/p/10459096.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值