自定义属性
Visual Studio 快捷方式:prop;
public int MyProperty { get; set; }
附加属性
附加是一种特殊的依赖属性。它允许给一个对象添加一个值,而该对象可能对这个值一无所知。
对控件非依赖属性的扩展,实现对非依赖属性的操作。
附加属性最常见的例子就是布局容器中DockPanel类中的Dock附加属性和Grid类中Row和Column附加属性。
定义
Visual Studio 快捷方式:propa;
public class OneControlHelper
{
public static string GetMyProperty2(DependencyObject obj)
{
return (string)obj.GetValue(MyProperty2Property);
}
public static void SetMyProperty2(DependencyObject obj, string value)
{
obj.SetValue(MyProperty2Property, value);
}
public static readonly DependencyProperty MyProperty2Property =
DependencyProperty.RegisterAttached("MyProperty2", typeof(string), typeof(ownerclass), new PropertyMetadata("", OnMyProperty2Changed));
private static void OnMyProperty2Changed(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
if (d is OneControl control)
{
control.PropertyName = e.NewValue;
}
}
}
依赖属性
自定义的依赖属性可以绑定控件的依赖属性,实现控件的同步操作。
依赖属性与自定义属性的区别
当属性变化要执行一段动画 或者要动态加载、生成或布局模板中的子控件时,使用注册依赖属性,其他情况,可以使用普通自定义的.NET属性,也可以使用注册依赖属性,一般使用普通属性,这样简便一些。
定义
Visual Studio 快捷方式:propdp;
public class OneControlEx : UserControl / OneControl
/// <summary>
/// 属性值
/// </summary>
public double MyProperty3
{
get { return (double)GetValue(MyProperty3Property); }
set { SetValue(MyProperty3Property, value); }
}
public static readonly DependencyProperty MyProperty3Property =
DependencyProperty.Register("MyProperty3", typeof(double), typeof(ownerclass), new PropertyMetadata(0d, OnValueChanged));
//public static readonly DependencyProperty ValueProperty = DependencyProperty.Register("MyProperty3", typeof(double), typeof(ownerclass),
// new FrameworkPropertyMetadata(0d, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, new PropertyChangedCallback(OnValueChanged)));
private static void OnValueChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
// 当对控件扩展时(OneControlEx),可以实现复杂的行为
(d as ownerclass).Update();
}
private void Update()
{
// TODO
}
}