一、WPF属性系统
WPF 中包含一个属性子系统,其中有两个重要的属性,即 相关属性( Dependency Property)和附加属性(Attached Property)。
二、CLR属性
我们把 .NET 中的属性称为 CLR 属性,CLR 属性主要实现了面向对象的封装。例如:
private int name;
public int Name
{
get { return name; }
set { name = value; }
}
三、相关属性 (DependencyProperty)
3.1 概念
相关属性:将自身某些属性传递给自身的子元素对象
<StackPanel>
<TextBlock FontSize="30" >
<StackPanel Width="494">
<Button Content="使用TextBlock字体大小"/>
<Button Content="使用自己的字体大小" FontSize="20"/>
<Button >
<TextBox Text="使用TextBlock字体大小"/>
</Button>
</StackPanel>
</TextBlock>
</StackPanel>
效果
3.2 相关属性的传递
WPF 中相关属性的传递规则:相关属性会沿着视觉树,从包容器类向其中的子元数传递,这种传递可以隔代进行。通过修改父元素的属性,可以打破上层传递。
3.3 WPF对相关属性的支持
DependencyObject 中与相关属性有关的操作 :
相关属性3.4 自定义相关属性
自定义相关属性的步骤:
-
声明相关属性变量(总是 public static)。
-
使用 FrameworkPropertyMetadata 在 WPF 相关属性系统注册,注册时用 DependencyProperty.Register 方法注册 读写 相关属性,或用 DependencyProperty.RegisterReadOnly 方法注册 只读 相关属性。
-
使用 DependencyObject 类中 GetValue , SetValue 方法来读写相关属性的值。
四、附加属性 (AttachedProperty)
附加属性(Attached Property)其实是相关属性的另外一种形式。所有从DependencyObject 类中派生出来的类,都可以使用附加属性。
public class AttachedPropertyClass
{
// 通过使用RegisterAttached来注册一个附加属性
public static readonly DependencyProperty IsAttachedProperty =
DependencyProperty.RegisterAttached("IsAttached", typeof(bool), typeof(AttachedPropertyClass),
new FrameworkPropertyMetadata((bool)false));
// 通过静态方法的形式暴露读的操作
public static bool GetIsAttached(DependencyObject dpo)
{
return (bool)dpo.GetValue(IsAttachedProperty);
}
public static void SetIsAttached(DependencyObject dpo, bool value)
{
dpo.SetValue(IsAttachedProperty, value);
}
}
网友评论