0

想象一下,我创建了一个应用程序,可以让您在网格内绘制路径。

因此,当您每次绘制某些东西时,都会将一个新的路径元素作为子元素添加到我的 Grid UI 元素中。

所以这是我绘制之前的网格:

    <Grid x:Name="myGrid" Grid.Row="0" PointerMoved="myGrid_PointerMoved" PointerPressed="myGrid_PointerPressed" PointerReleased="myGrid_PointerReleased" ></Grid>

当您绘制某些内容时,以下内容会以编程方式添加为上述网格的子项:

<Path Stroke="Black" StrokeThickness="1">
  <Path.Data>
    <PathGeometry>
      <PathFigure StartPoint="10,50">
        <LineSegment Point="200,70" />
      </PathFigure>
    </PathGeometry>
  </Path.Data>
</Path>

所以每个新的绘画动作都会添加一条像这样的路径作为我网格的子节点。

现在我想将早期制作的路径保存在我的 SQL 数据库中以便以后恢复它们,但我不知道如何在我的 SQL 数据库中保存一个 xml XAML UI 元素并在以后恢复它。

是否可以通过绑定或将我的 XAML 对象保存为字符串并稍后解析它们来做到这一点?这里的最佳做法是什么?

4

2 回答 2

1

尝试序列化您的 XAML-Control 并将其作为字符串保存到数据库中。稍后您可以像这样加载它:

UIElement cXamlElements = (UIElement)XamlReader.Parse("MY XAML CODE");

像这样:XAML 序列化

于 2013-08-14T13:29:09.197 回答
0

由于目前没有可用于 Metro 应用程序的 XamlWriter,因此我为 Paths 创建了自己的序列化方法。

如果有人有兴趣,这是我的方法:

        foreach (Windows.UI.Xaml.Shapes.Path path in this._notePaths.Where(myPath => this._newPaths.Contains(myPath)).ToObservableCollection() )
        {
            String myPathObjectString = String.Empty;

            myPathObjectString += @"<Path" + " xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"" + @" Stroke=""" + ((SolidColorBrush)this._notePaths.LastOrDefault().Stroke).Color.ToString()
                + @""" StrokeThickness=""" + path.StrokeThickness + @"""><Path.Data><PathGeometry><PathFigure StartPoint="""
                + ((int)((PathGeometry)path.Data).Figures.FirstOrDefault().StartPoint.X) + "," + ((int)((PathGeometry)path.Data).Figures.FirstOrDefault().StartPoint.Y) + @""">";

            foreach (LineSegment item in ((PathGeometry)path.Data).Figures.FirstOrDefault().Segments)
            {
                myPathObjectString += @"<LineSegment Point=""" + (int)item.Point.X + "," + (int)item.Point.Y + @""" />";
            }
            myPathObjectString += @"</PathFigure></PathGeometry></Path.Data></Path>";
        }

_notePaths 是一个ObservableCollection<Windows.UI.Xaml.Shapes.Path>.

生成的字符串稍后可以通过循环内的代码用于重建您保存的路径。也许值得一提的是,您不应该忘记 XamlReader 的命名空间,因为这给我带来了很多问题。

this._notePaths.Add((Windows.UI.Xaml.Shapes.Path)XamlReader.Load(item.PathObject));
于 2013-08-16T09:32:51.850 回答