在 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 时加上背景色和按钮方法

如何在 UWP C# 中使用 BezierSegment 在 Canvas 上渲染 InkStroke

在 Windows 10 中触控笔未触发 InkCanvas 事件