非常重要
依赖属性和附加属性,两者是有关系的,也是有些区别的,很多时候,可能会把两者混淆了。
附加属性(Attach Property)
顾名思义,就是附加上面的属性,自身是没有的,别人附加上面的,就变成了自己的属性,就可以使用点. 点击 出来。比如说,wpf中PasswordBox控件是不能进行绑定数据的,但是你把它绑定一个密码,那么就是附加属性了。附加属性,也属于一种依赖属性。
1.附加属性建立,输入propa,点击tab按钮2次
2.建立Password类,修改对应的参数
可见,独立创建一个类,附加到PasswordBox控件上面的属性。
cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
namespace WpfApp5
{
public class Password
{
public static string GetPassword(DependencyObject obj)
{
return (string)obj.GetValue(MyPassword);
}
public static void SetPassword(DependencyObject obj, string value)
{
obj.SetValue(MyPassword, value);
}
// Using a DependencyProperty as the backing store for MyProperty. This enables animation, styling, binding, etc...
public static readonly DependencyProperty MyPassword =
DependencyProperty.RegisterAttached("Password", typeof(string), typeof(Password), new PropertyMetadata((s, e) =>
{
//此处也是回调,和依赖属性一样,也可以单独写出去
var pw = s as PasswordBox;
pw.Password = e.NewValue.ToString(); //这里和xaml中建立关系
}
));
}
}
3.前端xaml
cs
<Window x:Class="WpfApp5.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApp5"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid>
<PasswordBox local:Password.Password="{Binding PW}" Name="AA" HorizontalAlignment="Left" Margin="416,183,0,0" VerticalAlignment="Top" Width="120"/>
<PasswordBox HorizontalAlignment="Left" Password="12313" Margin="20" Name="AA1" VerticalAlignment="Top" Width="120"/>
<Button Width="200" Height="50" Margin="176,246,424,139" Click="Button_Click">1</Button>
</Grid>
</Window>
4.CS文件中写法
此时,PasswordBox可以绑定PW的值,如果没有附加属性的话,那么原生的PasswordBox是不能直接赋值PW的,也就是没有Binding的功能,附加属性就是增加了Binding的功能。
源码
https://download.csdn.net/download/u012563853/88623271
来源: