2016-08-23 10 views
0

自分でメモアプリを作成しようとしています。私は、アプリがそれぞれ独自の「InkCanvas」を持ついくつかのページを持つことを望みます。私はこれを管理しましたが、ページを出るたびに 'InkStrokes'の 'コレクション/リスト'が消去されます。Inkstrokesを取得して追加する

私の解決方法は、 'InkStrokes'のリストを作成することです。そのリストをpages.xaml.csに保存してから、そのページを再びナビゲートするたびにそのリストを 'InkCanvas'にロードします。

ここで私は最初のストロークを取得し、それらを再度追加しようとしています:

var strokes = inkCanvas.InkPresenter.StrokeContainer.GetStrokes(); 

     foreach (var stroke in strokes) 
     { 
      inkCanvas.InkPresenter.StrokeContainer.AddStroke(stroke); 

     } 

私は運がなく、これをも試してみた:

private IEnumerable<InkStroke> pageStrokes; 

     pageStrokes = new IEnumerable<InkStroke> //Line continues 
     inkCanvas.InkPresenter.StrokeContainer.GetStrokes(); 

     inkCanvas.InkPresenter.StrokeContainer.AddStrokes(pageStrokes); 

私は私の問題は、不一致が原因である疑いがありますデータの種類。これに答える誰かが、可能な解決策とその理由について少し説明できるなら、非常に役に立ちます。

事前に、多くのあなたのおかげでインターネットの見知らぬ人に感謝します。

答えて

1

私のソリューションは、「InkStrokes」のリストを作成することです。そのリストをpages.xaml.csに保存してから、そのページを再びナビゲートするたびにそのリストを 'InkCanvas'にロードします。

Strokesの代わりにStrokeContainerを保存することができます。私は基本的なデモを行い、StrokeContainerをアプリケーションリソースに保存し、OnNavigatedToにロードすると動作します。

MainPage.xaml.cs:SaveStrokeSample

protected override void OnNavigatedTo(NavigationEventArgs e) 
{ 
    //if the mainpage resource exists then load the container 
    if (Application.Current.Resources.ContainsKey("mainpage")) 
    { 
     var resource = Application.Current.Resources["mainpage"]; 
     myCanvas.InkPresenter.StrokeContainer = (InkStrokeContainer)resource; 
    } 
} 
//I save the StrokeContainer in a button click event 
private void myBtn_Click(object sender, RoutedEventArgs e) 
{ 
    Application.Current.Resources.Add(new KeyValuePair<object, object>("mainpage", myCanvas.InkPresenter.StrokeContainer)); 
} 

そして、ここでは私のデモプロジェクトです。

+0

ありがとうございます。皮肉なことに私はちょうど解決策を見つけて答えを投稿するようになりましたが、これは非常にきれいで簡単でした。私の場合、別のストローク・コンテナー、タイプ変換のための複数の行、そしてちょっとした混乱がありました。あなたは素晴らしいです! – Magnus

関連する問題