文章目录
Attached Properties
这一节主要实现Attached Properties附加属性的封装,并以PasswordBox为例展示应用
1.Texts.xaml
在上一节Creating Login Form Sign Up Screen中,我们实现了TextBox的基本样式,而PasswordBox本质上是与TextBox类似的,但由于数据加密的原因,PasswordBox并没有直接提供MVVM的bingding,视频中开头有说到这个,这是为什么直接复制TextBox的样式而不能实现空值提示的原因。
在分析PasswordBox的实现之前,先分析一下上一节的TextBox怎么实现的空值提示
关键的地方是RelativeSource={RelativeSource TemplatedParent}中的TemplatedParent,对于RelativeSource 其实我们平时还会经常用到另一个值Self,我们去查看Microsoft的解释RelativeSourceMode Enum,这是一个枚举,描述的是当前控件位置与binding对象的位置层级(距离),这里的枚举数字值0-3并不如数字所示,关键是看解释和字面意思,Self是指当前的控件,TemplatedParent则指的是当前修饰控件的数据binding对象(TextBox),这里有一篇关于TemplatedParent的描述
<TextBlock.Style>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="Visibility" Value="Collapsed"></Setter>
<Style.Triggers>
<DataTrigger Binding="{Binding Text,RelativeSource={RelativeSource TemplatedParent}}" Value="">
<Setter Property="Visibility" Value="Visible"></Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>