美文网首页
NET WPF属性系统

NET WPF属性系统

作者: AC编程 | 来源:发表于2024-02-27 08:59 被阅读0次

一、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);
            }
 }

转载自:【C# .NET】WPF (三) 属性系统(极其重要)

相关文章

网友评论

      本文标题:NET WPF属性系统

      本文链接:https://www.haomeiwen.com/subject/urvzadtx.html