これを解決するには、画面に戻ったときにビューを離して再ロードする前に、ストロークをローカルファイルに保存します。まず私は、ページ内のロジックを処理することがより簡単に行うための新しい拡張クラスを追加します。
public static class InkCanvasExtensions
{
public static async Task RestoreStrokesAsync(this InkCanvas inkCanvas, StorageFolder folder, string fileName)
{
try
{
var file = folder.GetFileAsync(fileName);
using (var stream = await file.OpenAsync(FileAccessMode.Read))
{
using (var inputStream = stream.GetInputStreamAt(0))
{
await inkCanvas.InkPresenter.StrokeContainer.LoadAsync(inputStream);
}
}
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message);
}
}
public static async Task<bool> StoreStrokesAsync(this InkCanvas inkCanvas, StorageFolder folder, string fileName)
{
try
{
var file = await folder.CreateFileAsync(fileName, CreationCollisionOption.ReplaceExisting);
CachedFileManager.DeferUpdates(file);
using (var stream = await file.OpenAsync(FileAccessMode.ReadWrite))
{
using (var outputStream = stream.GetOutputStreamAt(0))
{
await inkCanvas.InkPresenter.StrokeContainer.SaveAsync(outputStream);
await outputStream.FlushAsync();
}
}
var status = await CachedFileManager.CompleteUpdatesAsync(file);
return status == FileUpdateStatus.Complete;
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message);
}
return false;
}
}
次に、ページ内の我々はmyCanvas
という名前InkCanvas
を持っており、私たちはApplicationData.Current.SharedLocalFolder
ですべてを格納すると仮定してみましょう:
public partial class Signature
{
protected override async void OnNavigatedTo(NavigationEventArgs e)
{
await myCanvas.RestoreStrokesAsync(ApplicationData.Current.SharedLocalFolder, "strokes.gif");
base.OnNavigatedTo(e);
}
protected override async void OnNavigatedFrom(NavigationEventArgs e)
{
await myCanvas.StoreStrokesAsync(ApplicationData.Current.SharedLocalFolder, "strokes.gif");
base.OnNavigatedFrom(e);
}
}
私の場合は、このアプローチが何となく奇妙だと思っても、これはかなりうまくいきます。
「StrokeContainerにはまだすべてのストロークが含まれています」とはどういう意味ですか?どのようにページ間を移動しましたか?あなたは現在使用しているコードを共有できますか? – Scavenger
@Scavengerこの問題の解決策を見つけました。あなたの質問に答えるには:NavigateToをデフォルトの動作として使用してナビゲートします。しかし、NavigationServiceでGoBackを使用すると、StrokeContainerにすべてのストロークが含まれますが、キャンバスは自動的に再描画されません。 – sprinter252