如何将附加属性限制为仅一个容器类的子级
本文关键字:一个 容器类 属性 | 更新日期: 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>
。行为只是复杂和更优雅的附加属性,所以其他事情几乎保持不变。