Присоединенные свойства BY DEFINITION могут быть присоединены к любому классу, который реализует DependencyObject.
Вы можете изменить реализацию геттеров и сеттеров следующим образом:
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.SetValue / obj.GetValue, который WPF будет вызывать напрямую много раз.
Лучшее решение - использовать для определения Behavior<MyContainer>
, который может быть присоединен ТОЛЬКО к MyContainer. Поведения - это просто изощренные и более элегантные свойства Attached, так что все остальное останется почти таким же.