Как сделать так, чтобы свойство элемента управления (в частности, в данном случае тип PointF) правильно сериализовалось в файл designer.cs формы?
Сейчас я смотрю на подкласс CodeDomSerializer, который действительно изменяет код designer.cs (добавление комментария согласно примеру на этой странице работает), но кажется, что я могу применить его только к классу CustomControl как в целом, и попытайтесь изменить базовую сериализацию, чтобы заменить CodeCastExpression на CodeObjectCreateExpression. Хотя это выглядит очень грязно, хотя ...
У меня есть пользовательский элемент управления, который содержит свойство типа PointF. Когда этот элемент управления добавляется в форму и сохраняется, файл designer.cs не говорит что-то вроде:
...
this.customControl.LocationF = new System.Drawing.PointF(50.0f, 50.0f);
...
Вместо этого говорится:
...
this.customControl.LocationF = ((System.Drawing.PointF)(resources.GetObject("customControl.LocationF")));
...
Я пытался «убедить» это свойство правильно сериализовать в файл конструктора, и мой поиск обнаружил пару многообещающих потенциальных клиентов:
DesignerSerializerAttribute, но я не могу понять, что именно он должен делать или как его использовать.
TypeConverter, который можно преобразовать в InstanceDescriptor (см. Пример, приведенный в MSDN для создания кода для пользовательских типов).
Я следовал примеру, приведенному в примере MSDN, заменив Point на PointF, а int на float, тогда мой CustomControl выглядит так:
public class CustomControl : Button
{
[Category("Layout")]
[TypeConverter(typeof(PointFConverter))]
public PointF LocationF
{
get { return this.Location; }
set { this.Location = new Point((int)value.X, (int)value.Y); }
}
}
Насколько я вижу, это должно работать, но, похоже, не влияет на то, как он сериализуется в файл конструктора.
Что-то еще, что я только что заметил - PointFConverter фактически никогда не используется при генерации файла designer.cs - он используется только при чтении или записи значения свойства в окне свойств в режиме конструктора ... Может быть эта вещь TypeConverter - тупик ...