GeometryDrawing сериализация / десериализация - PullRequest
0 голосов
/ 21 июля 2011

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

// some dummy predefined style, it has more drawings but i keep first one
const string templateXaml = @"<DrawingBrush xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation"" xmlns:x=""http://schemas.microsoft.com/winfx/2006/xaml"" Stretch=""Uniform"">
                <DrawingBrush.Drawing>
                    <DrawingGroup>
                        <DrawingGroup.Children>
                            <GeometryDrawing Geometry=""F1 M 77,92L 704,92L 704,517L 77,517L 77,92 Z "" x:Name=""test_name"">
                                <GeometryDrawing.Pen>
                                    <Pen Thickness=""4"" LineJoin=""Round"" Brush=""#FFFF7D00""/>
                                </GeometryDrawing.Pen>
                            </GeometryDrawing>
    <!--More drawings here -->
                            </DrawingGroup.Children>
                    </DrawingGroup>
                </DrawingBrush.Drawing>
            </DrawingBrush>";
        var drawingBrush = XamlReader.Parse(templateXaml) as DrawingBrush;
        var firstDrawing = (drawingBrush.Drawing as DrawingGroup).Children[0] as GeometryDrawing;
        //..
        var name = firstDrawing.GetValue(NameProperty);
        //..
        firstDrawing.SetValue(FrameworkElement.NameProperty, "some value");

Я хотел бы иметь x: Name здесь в переменной имени (или что-то вроде этого), чтобы иметь возможность изменить его и затем сериализовать, чтобы получить, например,тот же стиль, но с разными именами для рисунков (case теперь они называются Element1,2,3 ..., и должны быть названы в соответствии с предметной областью, и эта обработка должна быть автоматической, но не ручной в связи с тем, что естьнет возможности сделать это только для WYSIWYG - каждый чертеж помещается в Visual, визуальные элементы помещаются в пользовательский FrameworkElement и т. д.).Конечно, весь процесс работы с чертежами - это боль, но это требование к проектированию системы, которое я не могу игнорировать.Заранее спасибо.

1 Ответ

0 голосов
/ 29 июля 2011

Не нашел лучшего способа, чем обернуть рисунки в классы BL и сериализовать / десериализовать их. Немного утратили согласованность и нарушили требования - теперь у меня есть две сущности (простые геометрии и классы, которые их описывают), представляющие графические объекты, но они могут быть преобразованы / поменяны местами при необходимости.

...