约束来限制附加依赖属性的范围
有没有办法将约束添加到附加的依赖属性,以便它只能应用于元数据中的特定类型?约束来限制附加依赖属性的范围
如果不是,显式键入所连接DP的静态获取和设置方法是否有意义?
例子:
如果我有例如下面的声明:
public static int GetAttachedInt(DependencyObject obj) {
return (int)obj.GetValue(AttachedIntProperty);
}
public static void SetAttachedInt(DependencyObject obj, int value) {
obj.SetValue(AttachedIntProperty, value);
}
public static readonly DependencyProperty AttachedIntProperty =
DependencyProperty.RegisterAttached("AttachedInt", typeof(int),
typeof(Ownerclass), new UIPropertyMetadata(0));
会是meaningfull如下改变它,只能将其应用到文本框?
public static int GetAttachedInt(TextBox textBox) {
return (int)textBox.GetValue(AttachedIntProperty);
}
public static void SetAttachedInt(TextBox textBox, int value) {
textBox.SetValue(AttachedIntProperty, value);
}
public static readonly DependencyProperty AttachedIntProperty =
DependencyProperty.RegisterAttached("AttachedInt", typeof(int),
typeof(Ownerclass), new UIPropertyMetadata(0));
我的问题是,因为这导致了不一致,因为的GetValue和的SetValue可再用于任何类型以及在标记是没有可能限制attachement。
我之前做过的事情是,我在PropertyChanged处理程序中添加了一个异常,并在那里引发了一个只允许类型xy的异常。
您认为如何?
我相信所有你需要做的,以限制目标类型的附加属性是改变GetPropertyName
和SetPropertyName
方法的定义。
实施例:
public static int GetAttachedInt(MyTargetType obj)
{
return (int)obj.GetValue(AttachedIntProperty);
}
public static void SetAttachedInt(MyTargetType obj, int value)
{
obj.SetValue(AttachedIntProperty, value);
}
其中MyTargetType
可以是任何类型从DependencyObject
继承。
好吧,不是那么错误......我尝试使用Visual Studio 2013,并且如果您尝试将该属性附加到其他内容,则会出现以下错误:**附加属性“AttachedInt”只能应用于派生自“TextBox”。** – 2013-12-05 12:11:45
Benoit是对的。在VS2013中,XAML intellisense将阻止您将其附加到不受支持的元素。我不使用ReSharper。 – 2015-07-31 06:14:49
好问题...希望我的新答案可以解决它。 – Noldorin 2010-07-20 07:41:56
对于元数据,我希望得到另一个答案,但我也没有看到任何东西。对于访问方法的声明,我认为它是一个政策问题。如果这样做是常识,我会做。但对我来说,它有点像用大锁关上阳台,但让大门解锁。但至少set和get方法显示了附加dp的目的。 我将使用您的建议,但继续检查PropertyChanged处理程序中的目标类型。因此,如果用户尝试在错误的控件上使用DP,用户将会在设计器中收到异常。 – HCL 2010-07-20 08:16:54