如何将附加属性限制为仅一个容器类的子级

本文关键字:一个 容器类 属性 | 更新日期: 2023-09-27 17:56:53

给定下面的代码,如何丰富类以便将此附加属性限制为仅一个精确容器的子级(我们称之为"类MyContainer")),就像Canvas X和Y以及网格列和行附加属性一样。

public class MyAttachedPropertyClass
{
    public static readonly DependencyProperty MyAttachedProperty;
    static MyAttachedPropertyClass()
    {
        MyAttachedProperty= DependencyProperty.RegisterAttached("MyAttached",
                                                            typeof(MyProperty),
                                                            typeof(MyAttachedPropertyClass),
                                                            new PropertyMetadata(null);
    }
    public static MyProperty GetTitleText(DependencyObject obj)
    {
        return (MyProperty)obj.GetValue(MyAttachedProperty);
    }
    public static void SetTitleText(DependencyObject obj, MyProperty value)
    {
        obj.SetValue(MyAttachedProperty, value);
    }
}

}

如何将附加属性限制为仅一个容器类的子级

附加属性 BY DEFINITION 可以附加到实现 DependencyObject 的任何类。

您可以像这样更改 getter 和 setter 的实现:

public static MyProperty GetTitleText(MyContainer obj)
{
    return (MyProperty)obj.GetValue(MyAttachedProperty);
}
public static void SetTitleText(MyContainer obj, MyProperty value)
{
    obj.SetValue(MyAttachedProperty, value);
}

所以他们只会针对 MyContainer,但这并没有真正的帮助,因为真正的工作是在底层 OBJ 中完成的。设置值/对象。GetValue,WPF 会多次直接调用它。

最好的解决方案是用于定义一个只能附加到 MyContainer 的Behavior<MyContainer>。行为只是复杂和更优雅的附加属性,所以其他事情几乎保持不变。