Это потому, что вы создали стандартное свойство зависимости. Если вы хотите иметь возможность установить его для других типов, кроме A, то вместо этого вы хотите создать присоединенное свойство. Это займет всего несколько изменений кода:
- Зарегистрируйте его, вызвав DependencyProperty.RegisterAttached (вместо .Register)
- Добавьте статические методы
GetBorder2
и SetBorder2
в класс A. Даже если ваш код не вызывает эти методы, они являются частью шаблона и должны быть там - это то, как вы говорите компилятору что да, вы намерены дать людям возможность установить это присоединенное свойство в XAML.
Например:
public static readonly DependencyProperty Border2Property =
DependencyProperty.RegisterAttached("Border2", typeof(Border), typeof(A));
public static Border GetBorder2(DependencyObject obj)
{
return (Border) obj.GetValue(Border2Property);
}
public static void SetBorder2(DependencyObject obj, Border2 value)
{
obj.SetValue(Border2Property, value);
}
Если ваша собственность должна быть доступна только для определенных типов элементов - например, если он должен применяться только к FrameworkElement и его потомкам, или Panel и его потомкам, или что-то в этом роде, - тогда используйте это как тип первого параметра для GetBorder2 и SetBorder2.