📅  最后修改于: 2020-11-18 10:33:25             🧑  作者: Mango
依赖项属性是一种特定类型的属性,其值后面是敏锐的属性系统,该系统也是Windows运行时应用程序的一部分。定义依赖项属性的类必须从DependencyObject类继承。
XAML中使用的许多UI控件类都是从DependencyObject类派生的,并支持依赖项属性。以下XAML代码创建具有某些属性的按钮。
XAML中的x:Type标记扩展名具有类似于C#中的typeof()的功能。当指定采用对象类型的属性时,例如
当您编译并执行上述代码时,它将产生以下MainWindow。当鼠标悬停在按钮上时,它将更改按钮的前景色。当鼠标离开按钮时,它将变回其原始颜色。
依赖项属性和其他CLR属性之间的主要区别是-
CLR属性可以通过使用getter和setter直接从类的私有成员读取/写入。对于依赖项属性,它不存储在本地对象中。
依赖项属性存储在由DependencyObject类提供的键/值对字典中。
因为它在更改时存储属性,所以它还节省了大量内存。
它也可以在XAML中绑定。
在.NET Framework中,还可以定义自定义依赖项属性。以下是在C#中定义自定义依赖项属性的步骤。
使用系统调用注册器声明并注册您的依赖项属性。
提供属性的设置器和获取器。
定义一个静态处理程序来处理全局发生的任何更改。
定义一个实例处理程序以处理对该特定实例发生的任何更改。
下面给出的是C#中用于依赖项属性的代码,这些代码定义为设置用户控件的SetText属性。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace WpfApplication3 {
///
/// Interaction logic for UserControl1.xaml
///
public partial class UserControl1 : UserControl {
public UserControl1() {
InitializeComponent();
}
public static readonly DependencyProperty
SetTextProperty = DependencyProperty.Register("SetText", typeof(string),
typeof(UserControl1), new PropertyMetadata("",
new PropertyChangedCallback(OnSetTextChanged)));
public string SetText {
get {return(string) GetValue(SetTextProperty); }
set {SetValue(SetTextProperty, value);}
}
private static void OnSetTextChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) {
UserControl1 UserControl1Control = d as UserControl1;
UserControl1Control.OnSetTextChanged(e);
}
private void OnSetTextChanged(DependencyPropertyChangedEventArgs e) {
tbTest.Text = e.NewValue.ToString();
}
}
}
这是XAML文件,其中TextBlock被定义为用户控件,并且Text属性将由SetText依赖项属性分配给它。
以下XAML代码通过初始化其SetText依赖项属性和其他一些属性来创建用户控件。
让我们运行该应用程序,您可以立即在MainWindow中看到用户控件的依赖项属性已成功用作Text。