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>

したがって、新しい描画アクションごとに、このような 1 つのパスがグリッドの子として追加されます。

ここで、初期に作成したパスを SQL データベースに保存して後で復元したいと考えていますが、xml XAML UI 要素を SQL データベースに保存して後で復元する方法がわかりません。

バインドするか、XAML オブジェクトを文字列として保存して後で解析することでこれを行うことはできますか? ここでのベストプラクティスは何ですか?

4

2 に答える 2

1

XAML コントロールをシリアル化し、文字列としてデータベースに保存してみてください。後で次のようにロードできます。

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

このように: XAML シリアル化

于 2013-08-14T13:29:09.197 に答える
0

現在、メトロ アプリで使用できる 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 に答える