WPF-附加属性《十二》

非常重要

依赖属性和附加属性,两者是有关系的,也是有些区别的,很多时候,可能会把两者混淆了。

附加属性(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

来源:

WPF-附加属性《十二》-CSDN博客

相关推荐
晚安苏州4 小时前
WPF DataTemplate 数据模板
wpf
甜甜不吃芥末1 天前
WPF依赖属性详解
wpf
Hat_man_1 天前
WPF制作图片闪烁的自定义控件
wpf
晚安苏州2 天前
WPF Binding 绑定
wpf·wpf binding·wpf 绑定
wangnaisheng2 天前
【WPF】RenderTargetBitmap的使用
wpf
dotent·3 天前
WPF 完美解决改变指示灯的颜色
wpf
orangapple5 天前
WPF 用Vlc.DotNet.Wpf实现视频播放、停止、暂停功能
wpf·音视频
ysdysyn5 天前
wpf mvvm 数据绑定数据(按钮文字表头都可以),根据长度进行换行,并把换行的文字居中
c#·wpf·mvvm
orangapple5 天前
WPF 使用LibVLCSharp.WPF实现视频播放、停止、暂停功能
wpf
晚安苏州5 天前
WPF ControlTemplate 控件模板
wpf