/ / Як перекрити властивості залежності в родовому класі? - c #, дженерики, залежність-властивості

Як перекрити властивості залежності в родовому класі? - c #, дженерики, залежність-властивості

Тож у мене клас; дозволяє використовувати ScrollViewer клас як приклад. Він має властивість залежності, яку називають Content який приймає будь-який тип System.Object, чудово!

Скажімо, я отримую клас ScrollViewer, давайте назвати це ZoomScrollViewer, додає основні масштабування та панорамування за допомогою миші за допомогою клавіатури. Він також додає властивість залежності від його власного, AutoscaleContent.

Тепер я хочу вміти ставити ZoomScrollViewer у вікно інтерфейсу користувача, але я тільки хочу, щоб він прийняв полотно як вміст. Природно, я берусь за створення ZoomScrollViewer<T> клас

Однак як я можу змінити властивість Content так, щоб він приймав лише елементи типу <T>? Чи можу я замінити властивість залежності? Я трохи розгубився і спробував:

    public new T Content
{
get { return (T)base.Content; }
set { base.Content = value; }
}

Але, звичайно, це перестає бути властивістю залежності, тому весь код XAML виходить з ладу, коли я встановлюю прив'язки.

Редагувати: Також слід зазначити, що я переглянув використання:

ZoomScrollViewer.ContentProperty.OverrideMetadata(typeof(ZoomScrollControl2<T>), new PropertyMetadata(...?));

Щоб побачити, чи можу я щось зробити, використовуючи це, але здається, ви можете змінити лише значення за замовчуванням, якщо я щось не пропускаю?

Оновлення: Зараз я намагався використовувати наступне:

public class ZoomScrollControl2<T> : ZoomScrollViewer where T : FrameworkElement
{
static ZoomScrollControl2()
{
ContentProperty.OverrideMetadata(typeof(ZoomScrollControl2<T>), new FrameworkPropertyMetadata(typeof(ZoomScrollControl2<T>)));
}
}

public class CanvasZoomControl : ZoomScrollControl2<Canvas>
{
}

Я думав, що це спрацює, але все ще, здається, приймає Зміст будь-якого типу.

Оновлення: Коротше кажучи, я не впевнений, чи можливо те, що я хочу зробити, тому я позначив дискусію як відповідь, хоча це не відповідь як такої.

Відповіді:

2 для відповіді № 1

Я пропоную спробувати той підхід, як він запропонував це Стаття MSDN.

Це повинен замініть тип рефералу, тому ви можете посилатися на нього, використовуючи похідний тип.

Dependency Property видимість не сприймається .NET Framework для похідних типів, оскільки пошук право власності серед дерев типів має вартість з точки зору продуктивності та враховуючи, що ми використовуємо DP що стосується прив'язки інтерфейсу, це може призвести до небажаних питань щодо продуктивності.