📅  最后修改于: 2020-11-18 09:51:40             🧑  作者: Mango
在WPF应用程序中,依赖项属性是扩展CLR属性的一种特定类型的属性。它利用了WPF属性系统中可用的特定功能。
定义依赖项属性的类必须从DependencyObject类继承。 XAML中使用的许多UI控件类都是从DependencyObject类派生的,并且它们支持依赖项属性,例如Button类支持IsMouseOver依赖项属性。
以下XAML代码创建具有某些属性的按钮。
XAML中的x:Type标记扩展名具有类似于C#中的typeof()的功能。当指定采用对象类型的属性时,例如
编译并执行以上代码后,将获得以下MainWindow 。当鼠标悬停在按钮上时,它将更改按钮的前景色。当鼠标离开按钮时,它将变回其原始颜色。
在应用程序中使用依赖项属性时,它会带来各种好处。在以下情况下,Dependency属性可以在CLR属性上使用-
基本上,依赖项属性提供了许多使用CLR属性无法获得的功能。
下面列出了依赖项属性和其他CLR属性之间的主要区别-
CLR属性可以通过使用getter和setter直接从类的私有成员读取/写入。相反,依赖项属性未存储在本地对象中。
依赖项属性存储在由DependencyObject类提供的键/值对字典中。因为它在更改时存储属性,所以它还节省了大量内存。它也可以在XAML中绑定。
在.NET Framework中,还可以定义自定义依赖项属性。请按照下面给出的步骤在C#中定义自定义依赖项属性。
使用系统调用注册器声明并注册您的依赖项属性。
提供该属性的setter和getter。
定义一个静态处理程序,该处理程序将处理全局发生的所有更改
定义一个实例处理程序,它将处理该特定实例发生的任何更改。
以下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。