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博客

相关推荐
△曉風殘月〆7 小时前
如何在WPF中捕获窗口外的事件
wpf
爱吃烤鸡翅的酸菜鱼1 天前
Java 事件发布-订阅机制全解析:从原生实现到主流中间件
java·中间件·wpf·事件·发布订阅
武藤一雄2 天前
WPF中ViewModel之间的5种通讯方式
开发语言·前端·microsoft·c#·wpf
CSharp精选营3 天前
都是微软亲儿子,WPF凭啥干不掉WinForm?这3个场景说明白了
c#·wpf·跨平台·winform
baivfhpwxf20233 天前
wpf TextBlock 控件如何根据内容换行?
wpf
亘元有量-流量变现3 天前
鸿蒙、安卓、苹果音频设备技术深度解析与开发实践
android·wpf·harmonyos·亘元有量·积分墙
软泡芙3 天前
【Bug】ReactiveUI WPF绑定中依赖属性不更新的问题分析与解决方案
java·bug·wpf
浪扼飞舟3 天前
WPF输入验证(ValidationRule)
java·javascript·wpf
IOFsmLtzR4 天前
Flink Agents 源码解读 --- (5) --- ActionExecutionOperator
microsoft·flink·wpf
廋到被风吹走6 天前
【AI】Codex 复杂任务拆解:从“一气呵成“到“步步为营“
人工智能·wpf