约束以限制附加依赖项属性的范围

时间:2010-07-19 09:11:55

标签: wpf

有没有办法向附加的依赖项属性添加约束,以便它只能应用于特定类型,元数据中的某些内容?

如果没有,显式输入附加DP的静态Get-and Set-methods是否有意义?

示例:

如果我有以下声明:

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));

如下所示更改它是否有意义,只将其应用于TextBoxes?

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可以再用于任何类型,而且标记也不可能限制附件。

我之前做过的是我在PropertyChanged处理程序中添加了一个异常,并在那里引发了一个只允许类型为xy的异常。

您怎么看?

1 个答案:

答案 0 :(得分:17)

我认为,为了限制附加属性的目标类型,您需要做的就是更改GetPropertyNameSetPropertyName方法的定义。

示例:

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继承的任何类型。