Итак, у меня есть класс;Давайте использовать класс 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>
{
}
Что, как я думал, будет работать, но все равно кажется, что он принимает Контент любого типа.
Обновление: Короче говоря, я не уверен, возможно ли то, что я хочу сделать, поэтому я пометил обсуждение как ответ, хотя это и не ответ как таковой.