Я пишу класс, который отображает некоторый контент в WPF, и я хочу дать пользователю контроль над тем, как контент отображается. Рендеринг состоит в основном из штриховых линий, поэтому я решил обратиться к классу System.Windows.Forms.Shapes.Line, чтобы получить представление о том, какие свойства я мог бы реализовать. Это заставило меня реализовать большинство свойств StrokeXXXX
, и это очень сложная работа, поскольку для каждого требуется метаданные, влияющие на рендеринг.
Коллега предложил мне просто «позаимствовать» свойства у Shape следующим образом:
Shape.StrokeThicknessProperty.AddOwner(typeof(MyType));
Это кажется довольно хорошей идеей. Я думал, что, делая это, я потеряю способность устанавливать обратные вызовы приведения и свойства, измененные, но похоже, перегрузка, которая принимает PropertyMetadata, позволяет это. Единственный недостаток, который я вижу, - если реализация Shape изменится, это повлияет на наш класс, но я не уверен, как часто я ожидаю значительного изменения интерфейсов .NET.
Что ты думаешь? Является ли это приемлемым способом определения свойств, когда хорошо известный класс имеет желаемое поведение и стабильный интерфейс, или надежный способ играть с огнем, находясь в бензиновой ванне?