2013-08-14 5 views
0

그리드 내에서 패스를 페인트 할 수있는 앱을 만들었다 고 상상해보십시오. 때마다 당신이 뭔가를 칠 때데이터베이스에 UIElements를 저장하고 나중에 복원하는 방법?

그래서, 새 경로 요소는 내 그리드 UI 요소에 자식으로 추가됩니다.

그래서이 일이 페인트되기 전에 내 그리드입니다 :

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

그리고 당신이 뭔가를 그릴 때 다음 위의 그리드의 자식으로 programmtically 추가됩니다

<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 개체를 저장하고 나중에 분석 할 수 있습니까? 여기서 가장 좋은 방법은 무엇일까요?

답변

1

은 XAML 제어를 직렬화하고 데이터베이스에 문자열로 저장하려고합니다. 나중에이 같은로드 할 수 : 이것처럼

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

을 : XAML Serialization

+0

답장을 보내 주셔서 감사합니다. 제안 된 솔루션이 저에게 효과적이었습니다. ItemsControl과 함께 사용했습니다. 내가 다시는 내 대답을 해결하는 데 여기 – Evils

+0

좋아 끝났어요 때 내 솔루션을 게시합니다, 슬프게도 XamlWriter 메트로 스타일 앱에서 사용할 수없는 인도 표준시. 그래서 내 경로를 직렬화하는 또 다른 방법을 찾아야합니다 ... – Evils

0

을 메트로 애플 리케이션을위한 오늘에 의해 가능한 XamlWriter이 없기 때문에, 나는 경로에 대한 내 자신의 직렬화 방법을 만들었습니다.

 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)); 
관련 문제