Ограничение для ограничения объема прикрепленного свойства зависимостей

Есть ли способ добавить ограничение к прикрепленному свойству зависимостей, чтобы его можно было применить только к определенному типу, что-то в метаданных?

Если нет, имеет ли смысл явный тип статических методов Get-и Set-приложенных 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));

Было бы целесообразно изменить его следующим образом, чтобы применить его только к 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

Я считаю, что все, что вам нужно сделать, чтобы ограничить целевой тип прикрепленных свойств, - это изменение определений методов 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.