我正在用C#编写一个UWP应用程序 - 它将是一个Flashcard应用程序,其中包含两个用于"前端"和"返回"的卡片。 InkCanvas功能似乎工作正常。问题是,当我去"保存" InkCanvas的笔画容器到.GIF文件(这些documents支持),生成的.GIF文件不包含墨迹。相反,它们大多是空白的。示例:
UWP开发人员可以帮助我指出正确的方向吗?以下是当前形式的代码:
CreateFlashCard.xaml.cs:
private void AddToDeck(object sender, RoutedEventArgs e)
{
// If there was ink on the canvases
if (inkCanvas.InkPresenter.StrokeContainer.GetStrokes().Count > 0
&& inkCanvas2.InkPresenter.StrokeContainer.GetStrokes().Count > 0)
{
// Create the FlashCard and add it to the deck
FlashCard newCard = new FlashCard
{
Front = inkCanvas.InkPresenter,
Back = inkCanvas2.InkPresenter
};
// Add to the deck
if (Deck == null)
{
Deck = new List<FlashCard>();
}
// Now Add to the Deck
Deck.Add(newCard);
// Save the card
newCard.Save(_FolderName, Deck.Count-1);
// Now make way for new InkCanvases
inkCanvas.InkPresenter.StrokeContainer.Clear();
inkCanvas2.InkPresenter.StrokeContainer.Clear();
}
// The user is adding a new card without drawing on the old one
else
{
return;
}
}
FlashCard.cs:
/// <summary>
/// Save the canvases to GIF files in the deck's folder.
/// </summary>
/// <param name="FolderName"> The folder to save the files in</param>
/// <param name="CardIndex">The "number" of the card that is being saved</param>
public async void Save(string FolderName, int CardIndex)
{
// Find existing folder
StorageFolder folder = await ApplicationData.Current.LocalFolder.GetFolderAsync(FolderName);
if (folder == null)
{
// Error!
} else
{
// Use a utility function to write to files
// Front and Back being InkPresenters from two sep. InkCanvases
WriteWithStream(folder, CardIndex, 'A', Front );
WriteWithStream(folder, CardIndex, 'B', Back);
}
}
private async void WriteWithStream(StorageFolder folder, int CardIndex, char Letter, InkPresenter FrontOrBack)
{
// Generate the ink files, A and B
StorageFile inkFile = await folder.CreateFileAsync("Card" + CardIndex + Letter + ".gif", CreationCollisionOption.ReplaceExisting);
// Prevent changes until we're done
//CachedFileManager.DeferUpdates(inkFile);
// Open a stream
IRandomAccessStream stream = await inkFile.OpenAsync(FileAccessMode.ReadWrite);
// Write out using the stream
using (IOutputStream outputStream = stream.GetOutputStreamAt(0))
{
await FrontOrBack.StrokeContainer.SaveAsync(outputStream);
await outputStream.FlushAsync();
}
// Dispose of the stream
stream.Dispose();
// We are now done with the file
Windows.Storage.Provider.FileUpdateStatus status = await CachedFileManager.CompleteUpdatesAsync(inkFile);
}
谢谢大家!
答案 0 :(得分:0)
已解决 - 我的&#34;保存功能的异步性质&#34;与清除画布相冲突 - 我需要等待生成文件,然后清除画布。