Silverlight XamlWriter - PullRequest
       4

Silverlight XamlWriter

3 голосов
/ 10 августа 2009

Я вижу, что .Net XamlWriter недоступен в Silverlight. Ну, в любом случае, он мне нужен, поэтому я предполагаю, что есть решение для этого ..?

У меня есть несколько объектов UIElement (Path, Ellipse, Rectangle, ..), и я хочу сохранить их определение Xaml, чтобы я мог загрузить их позже, используя XamlWriter.Load (). Есть идеи, как это сделать? Любые реализации 3rdParty XamlWriter и т. Д., Которые рекомендуются?

1 Ответ

3 голосов
/ 14 августа 2009

Кажется, есть некоторые реализации XamlWriter для Silverlight. Самый серьезный вариант, который я видел, находится в Silverlight Contrib, но он еще не поддерживается для SL3, который я использую.

Поскольку у меня было всего несколько конкретных объектов для извлечения xaml, я создал функции для этого сам. Будет проведен еще один рефакторинг, но этот работает для нахождения xaml для моего рисования пути - хранится как InkPresenter:

    public static string ConvertPathToXaml(InkPresenter drawObject)
    {
        string xmlnsString = "http://schemas.microsoft.com/client/2007";
        XNamespace xmlns = xmlnsString;

        var strokes = new XElement(xmlns + "StrokeCollection");             

        foreach (var strokeData in drawObject.Strokes)
        {
            var stroke = new XElement(xmlns + "Stroke",
                new XElement(xmlns + "Stroke.DrawingAttributes",
                    new XElement(xmlns + "DrawingAttributes",
                        new XAttribute("Color", strokeData.DrawingAttributes.Color),
                        new XAttribute("OutlineColor", strokeData.DrawingAttributes.OutlineColor),
                        new XAttribute("Width", strokeData.DrawingAttributes.Width),
                        new XAttribute("Height", strokeData.DrawingAttributes.Height))));                        
            var points = new XElement(xmlns + "Stroke.StylusPoints");

            foreach (var pointData in strokeData.StylusPoints)
            {
                var point = new XElement(xmlns + "StylusPoint",
                    new XAttribute("X", pointData.X),
                    new XAttribute("Y", pointData.Y));
                points.Add(point);
            }
            stroke.Add(points);
            strokes.Add(stroke);
        }

        var strokesRoot = new XElement(xmlns + "InkPresenter.Strokes", strokes);
        var inkRoot = new XElement(xmlns + "InkPresenter", new XAttribute("xmlns", xmlnsString), 
            new XAttribute("Opacity", drawObject.Opacity), strokesRoot);

        return inkRoot.ToString();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...