在 mvvm 中为 uwp 分享 inkCanvas 问题
Posted
技术标签:
【中文标题】在 mvvm 中为 uwp 分享 inkCanvas 问题【英文标题】:Share inkCanvas issue in mvvm for uwp 【发布时间】:2022-01-17 16:02:48 【问题描述】:我在使用 WTS 的 mvvm 工具包中有一个 UWP 应用程序,我共享 inkCanvas 的问题是我在以下内容中遇到错误:没有给出与所需的形式参数“数据”相对应的参数ShareSourceData.ShareDataService(DataPackage)' InkPen ViewModelsInkSmartCanvasViewModel.cs ShareDataAsync代码c#中提示错误
InkSmartCanvasViewModel.cs
私有异步任务 ShareDataAsync()
await _shareSourceData?.ShareDataService();
public ICommand ShareCommand => shareCommand ?? (shareCommand = new RelayCommand(async () => await ShareDataAsync()));
ShareDataSource.cs
存储文件文件;私有只读 InkCanvas _inkCanvas; private RandomAccessStreamReference strokeStream;
public async Task ShareDataService(DataPackage data)
file = await ApplicationData.Current.LocalFolder.CreateFileAsync("MyPen.png",
Windows.Storage.CreationCollisionOption.ReplaceExisting);
DataTransferManager dataTransferManager = DataTransferManager.GetForCurrentView();
dataTransferManager.DataRequested += DataTransferManager_DataRequested;
DataTransferManager.ShowShareUI();
private async void DataTransferManager_DataRequested(DataTransferManager sender, DataRequestedEventArgs args)
DataRequest request = args.Request;
DataRequestDeferral deferral = request.GetDeferral();
using (var stream = await file.OpenAsync(FileAccessMode.ReadWrite))
await _inkCanvas.InkPresenter.StrokeContainer.SaveAsync(stream);
strokeStream = RandomAccessStreamReference.CreateFromFile(file);
request.Data.SetBitmap(strokeStream);
request.Data.Properties.Title = "InkPen";
request.Data.Properties.Description = "send InkPen";
await ShareDataService(args.Request.Data);
deferral.Complete();
【问题讨论】:
基于文档-Save ink strokes to a file-GIF 是唯一支持保存墨迹数据的文件格式。请尝试使用 Gif 保存笔画,然后重试。 我在 InkSmartCanvasViewModel.cs 中遇到的问题 错误信息中提到No argument has been given对应于所需的形参'data',你的问题的原因是你没有传递一个正确的参数到DataRequest.data property
。
然后在 _shareSourceData?。 sharedataservice() 将具有正确的参数,并且在正确的 public iCommand 中
问题应该出在DataRequest.data property
而不是iCommand
【参考方案1】:
问题是您使用 0 个参数调用 ShareSourceData.ShareDataService
,而函数声明它需要一个类型为 DataPackage
的参数。由于参数data
似乎没有被使用,你应该可以从函数中删除参数,即使用这个函数声明:
public async Task ShareDataService()
...
【讨论】:
可以是这样的。 公共异步任务 ShareDataService() .. await _shareDataSource?.ShareDataService(Datapackage data); 不确定你的意思。您在InkPen ViewModelsInkSmartCanvasViewModel.cs
文件中遇到的错误是您正在调用一个需要参数data
的方法。由于该函数不需要该参数,因此您可以从函数中删除该参数。
那么参数的日期从它必须被删除的地方开始。根据功能可以 ShareSourceData.cs 。
你到底是什么意思?
如果问题出在函数中,则故障可能是 ShareDataSource.cs以上是关于在 mvvm 中为 uwp 分享 inkCanvas 问题的主要内容,如果未能解决你的问题,请参考以下文章
UWP开发之Mvvmlight实践九:基于MVVM的项目架构分享
迁移桌面程序到MS Store(12)——WPF使用UWP InkToolbar和InkCanvas
WPF 使用 Microsoft.Toolkit.Wpf.UI.Controls 的 InkCanvas 时加上背景色和按钮方法
WPF 使用 Microsoft.Toolkit.Wpf.UI.Controls 的 InkCanvas 时加上背景色和按钮方法