单独来看,所有代码都能完美运行。用于保存文件的片段,用于选择目录以将其保存到的片段以及消息对话框都很好用。
但是当我将它们捆绑在一起时,我的访问被拒绝了。我没有使用 DocumentsLibrary 功能,因为在这种情况下我不需要这样做,但是,在遇到问题后启用此功能确认它不是问题。
场景:用户想在文本框中输入文本后创建一个新文档。AMessageDialog
出现,询问他们是否要先保存对现有文件的更改 - 用户单击是(保存文件)。
现在,您可以在此处处理由MessageDialog
.
在 IUICommand 命令事件处理程序中,您可以测试单击了哪个按钮,并采取相应措施。
我用 switch 语句做到了这一点:
switch(command.Label) {
case "Yes":
SaveFile(); // extension method containing save file code that works on its own
break;
case "No":
ClearDocument();
break;
default:
break;
}
现在,除了是按钮之外,每个案例都很好用。当您单击是时,将调用一个 e 张力方法,该方法具有保存到文件的代码
当您单击“是”按钮时,您会收到 ACCESS DENIED 异常。异常的细节没有透露任何东西。
我认为这与我使用MesaageDialog
. 但是在搜索了几个小时之后,我还没有找到一个关于如何在按下按钮FileSavePicker
时保存文件的示例。MesaageDialog
关于如何做到这一点的任何想法?
更新代码
当用户单击 AppBar 上的新建文档按钮时,会触发此方法:
async private void New_Click(object sender, RoutedEventArgs e)
{
if (NoteHasChanged)
{
// Prompt to save changed before closing the file and creating a new one.
if (!HasEverBeenSaved)
{
MessageDialog dialog = new MessageDialog("Do you want to save this file before creating a new one?",
"Confirmation");
dialog.Commands.Add(new UICommand("Yes", new UICommandInvokedHandler(this.CommandInvokedHandler)));
dialog.Commands.Add(new UICommand("No", new UICommandInvokedHandler(this.CommandInvokedHandler)));
dialog.Commands.Add(new UICommand("Cancel", new UICommandInvokedHandler(this.CommandInvokedHandler)));
dialog.DefaultCommandIndex = 0;
dialog.CancelCommandIndex = 2;
// Show it.
await dialog.ShowAsync();
}
else { }
}
else
{
// Discard changes and create a new file.
RESET();
}
}
还有 FileSavePicker 的东西:
private void CommandInvokedHandler(IUICommand command)
{
// Display message showing the label of the command that was invoked
switch (command.Label)
{
case "Yes":
MainPage rootPage = this;
if (rootPage.EnsureUnsnapped())
{
// Yes was chosen. Save the file.
SaveNewFileAs();
}
break;
case "No":
RESET(); // Done.
break;
default:
// Not sure what to do, here.
break;
}
}
async public void SaveNewFileAs()
{
try
{
FileSavePicker saver = new FileSavePicker();
saver.SuggestedStartLocation = PickerLocationId.Desktop;
saver.CommitButtonText = "Save";
saver.DefaultFileExtension = ".txt";
saver.FileTypeChoices.Add("Plain Text", new List<String>() { ".txt" });
saver.SuggestedFileName = noteTitle.Text;
StorageFile file = await saver.PickSaveFileAsync();
thisFile = file;
if (file != null)
{
CachedFileManager.DeferUpdates(thisFile);
await FileIO.WriteTextAsync(thisFile, theNote.Text);
FileUpdateStatus fus = await CachedFileManager.CompleteUpdatesAsync(thisFile);
//if (fus == FileUpdateStatus.Complete)
// value = true;
//else
// value = false;
}
else
{
// Operation cancelled.
}
}
catch (Exception exception)
{
Debug.WriteLine(exception.InnerException);
}
}