如何在数据库中保存UIElements并在以后还原它们



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

因此,每次绘制某个内容时,都会将一个新的路径元素作为子元素添加到我的网格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对象保存为字符串并稍后进行解析来完成此操作?这里的最佳做法是什么?

尝试序列化XAML控件并将其作为字符串保存到数据库中。稍后你可以这样加载:

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

像这样:XAML序列化

由于目前还没有适用于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));

最新更新