我有一个UWP应用,在其中一个页面上使用InkCanvas
。当用户离开此页面然后返回到该页面时,StrokeContainer
仍将包含所有笔划,但画布不会显示它们,因此画布对用户看起来是空的。
我看到很多样本显示了笔画的保存和加载。我只是想实现它们在容器内的所有时间都显示笔划。我找不到任何“重绘”机制或类似的东西。
答案 0 :(得分:1)
解决方法是在离开视图之前将笔划存储在本地文件中,并在返回到屏幕时重新加载它们。首先,我添加了一个新的Extension-Class,以便更轻松地处理页面中的逻辑:
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;
}
}
然后在页面内部假设我们有一个名为InkCanvas
的{{1}},我们会将所有内容存储在myCanvas
中:
ApplicationData.Current.SharedLocalFolder
即使我仍然认为这种方法在某种程度上是奇怪的,我的情况也很好。