Список форм для базы данных - PullRequest
2 голосов
/ 23 октября 2009

У меня есть общая коллекция фигур, которые мне нужно пройти через WCF, чтобы сохранить в базе данных для будущего / общего использования. К сожалению, все System.Windows.Shapes запечатаны, поэтому я не могу унаследовать их и сделать их сериализуемую копию. Я «мог» написать свой собственный набор сериализуемых фигур, так как я все равно написал 3 пользовательских формы для своего приложения, но я бы не хотел этого делать, если это возможно.

Я полностью осознаю, что мог бы использовать XAMLReader и XAMLWriter, чтобы убрать их с экрана и вернуть обратно, но этого недостаточно, поскольку размер сетки, содержащей фигуры, не всегда то же самое, и мне нужно, чтобы формы были соответственно перемещены. Фигуры используются в качестве наложения на другое изображение, и ОЧЕНЬ важно, чтобы фигуры оставались в том же месте над фоновым изображением.

Любые идеи или помощь будут оценены.

~ md5sum ~

Ответы [ 2 ]

3 голосов
/ 23 октября 2009

Другим решением является создание методов сериализации, которые принимают форму параметров и сериализуют свойства в xml или что угодно. Пример будет выглядеть так:

/// <summary>use reflection to serialize all properties and type into an xml string</summary>
/// <param name="s">shape object to be serialized</param>
/// <return>the serialized xml string</return>
public static string SerializeShape(Shape s);

/// <summary>create a new Shape object with given xml data</summary>
/// <param name="s">xml serialization generated by SerializeShape(Shape s)</param>
/// <return>the constructed shape</return>
public static Shape DeserializeShape(string s);

Возможно, вам придется немного изменить методы, чтобы лучше соответствовать вашим объектам. В худшем случае вам придется создать несколько пар этих методов сериализации / десериализации для разных форм.

0 голосов
/ 23 октября 2009

Ты прав. Если они запечатаны, они не могут быть унаследованы и, следовательно, не могут быть сериализованы. Вам нужно будет создать свои собственные классы фигур. Я предполагаю, что ваша проблема в том, что вам не нужно воссоздавать все методы и свойства.

Я предлагаю вам создавать "облегченные" формы (например, USA Today - это "облегченные" новости). Просто укажите минимальные свойства, необходимые для полного определения каждой фигуры:

  • Площадь: ширина (двойная), вращение угол (двойной) и центр (точка).
  • Прямоугольник: ширина, высота, центр и угол поворота.
  • Круг: радиус (двойной), центр
  • Эллипс: ширина, высота, центр, вращение ... и т. д.

Когда вы десериализуете их, вы создадите экземпляр фактического System.Windows.Shapes, но вам не придется заново создавать все это.

...