Uwp 如何在没有文件选择器的情况下在固定位置保存和加载InkCanvas gif文件
我想保存并加载Uwp 如何在没有文件选择器的情况下在固定位置保存和加载InkCanvas gif文件,uwp,gif,inkcanvas,filepicker,Uwp,Gif,Inkcanvas,Filepicker,我想保存并加载InkCanvasgif文件,而不使用文件选择器 我看到一个正在使用FilePicker,但我想在单击save按钮时自动保存gif文件 例如,当我保存1InkCanvasgif文件时 然后,gif文件将保存在我的C:驱动器上的特定文件夹中 我还希望文件名自动增长,以便可以加载特定的InkCanvas文件 这可能吗?UWP应用程序在沙箱中运行,这样用户就可以知道应用程序在做什么以及它访问硬盘上的哪些文件 如果您想将文件保存到用户硬盘上的某个位置,则必须首先授予您访问该位置的权限。有几
InkCanvas
gif
文件,而不使用文件选择器
我看到一个正在使用FilePicker
,但我想在单击save按钮时自动保存gif
文件
例如,当我保存1InkCanvas
gif
文件时
然后,gif
文件将保存在我的C:驱动器上的特定文件夹中
我还希望文件名自动增长,以便可以加载特定的InkCanvas
文件
这可能吗?UWP应用程序在沙箱中运行,这样用户就可以知道应用程序在做什么以及它访问硬盘上的哪些文件 如果您想将文件保存到用户硬盘上的某个位置,则必须首先授予您访问该位置的权限。有几种方法可以实现这一点:
StorageFile
存储在一个键下,这将允许您下次再次检索它StorageFolder
存储在一个键下,以便下次再次检索picturesLibrary
功能,然后访问用户的图片库进行如下写入:Windows.Storage.StorageLibrary.GetLibraryAsync(Windows.Storage.KnownLibraryId.pictures)代码>
broadFileSystemAccess
功能,然后您可以直接访问用户有权访问的任何文件系统路径。唯一的问题是,你需要有一个很好的理由来这样做(比如构建一个文件浏览器应用程序,或者类似的),因为此功能是在Microsoft Store认证期间检查的,如果您发布的应用程序类型似乎不需要此功能,则您的应用程序可能会被拒绝我可以想象两种不同的情况会让你陷入这个问题:
var selectedFolder = Windows.Storage.ApplicationData.Current.LocalFolder;
在第二种情况下,您可以让用户选择一个路径,然后每次单击“保存”按钮时,您都可以自动保存图像:
private async void btnSelectFolder_Click(object sender, RoutedEventArgs e)
{
var picker = new FolderPicker();
picker.SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.Desktop;
picker.FileTypeFilter.Add("*");
selectedFolder = await picker.PickSingleFolderAsync();
TxbFolder.Text = selectedFolder.Path;
}
在“保存”按钮的“单击”事件处理程序中,您只更改检索文件的位置,其余的保持如下所示:
XAML
您是否有任何来源可以告诉我们“广泛的文件系统访问”功能是否需要单独的功能请求,或者在商店提交过程中许可是否被拒绝?虽然文档中没有直接说明,但UWP社区站和专用博客帖子的注释中都提到了这一点-是的,我看到了这一站。几天前,我提交了一份能力申请。我的请求仍在进行中,但盖伊女士告诉我,我需要一个公司帐户来请求受限功能,我需要将我的所有应用程序移动到一个单独的公司帐户中。这是一个暂时性的问题——根据政策,你不需要有一个公司帐户来拥有这种能力。我们会尽力在我们这边解决这个问题。对不起。@Kay不,选项是“完整解决方案”,每个都是独立的,您不必组合它们。如果您想完全避免选取器,解决方案3和4是合适的。如果您同意用户选择一个文件夹,然后保存该文件夹中的所有图像,您也可以使用解决方案2
private async void btnSave_Click(object sender, RoutedEventArgs e)
{
// Get all strokes on the InkCanvas.
IReadOnlyList<InkStroke> currentStrokes = inkCanvas.InkPresenter.StrokeContainer.GetStrokes();
// Strokes present on ink canvas.
if (currentStrokes.Count > 0)
{
var file = await selectedFolder.CreateFileAsync("InkSample.gif", CreationCollisionOption.GenerateUniqueName);
if (file != null)
{
// The rest remains the same as in the example
// ...
}
}
}
private StorageFolder selectedFolder;
public MainPage()
{
this.InitializeComponent();
// Set supported inking device types.
inkCanvas.InkPresenter.InputDeviceTypes =
Windows.UI.Core.CoreInputDeviceTypes.Mouse |
Windows.UI.Core.CoreInputDeviceTypes.Pen;
// Listen for button click to initiate save.
btnSave.Click += btnSave_Click;
// Listen for button click to clear ink canvas.
btnClear.Click += btnClear_Click;
btnSelectFolder.Click += btnSelectFolder_Click;
selectedFolder = Windows.Storage.ApplicationData.Current.LocalFolder;
TxbFolder.Text = selectedFolder.Path;
}
<Grid
Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<StackPanel x:Name="HeaderPanel" Orientation="Horizontal" Grid.Row="0">
<TextBlock x:Name="Header"
Text="Basic ink store sample"
Style="{ThemeResource HeaderTextBlockStyle}"
Margin="10,0,0,0" />
<TextBox x:Name="TxbFolder"
Text="Select a folder"
Width="250"
Margin="24,12,10,12"/>
<Button x:Name="btnSelectFolder"
Content="..."
Margin="0,0,10,0"/>
<Button x:Name="btnSave"
Content="Save"
Margin="24,0,10,0"/>
<Button x:Name="btnClear"
Content="Clear"
Margin="24,0,10,0"/>
</StackPanel>
<Grid Grid.Row="1">
<InkCanvas x:Name="inkCanvas" />
</Grid>