.net 在UWP中将数据包添加到Windows剪贴板中的问题

tmb3ates  于 2023-06-25  发布在  .NET
关注(0)|答案(1)|浏览(123)

在我的UWP应用程序中,我想实现COPY/PAST功能。
为此,我创建了CopiedResourceNodes,它保存了有关复制文件的信息

public class CopiedResourceNodes
{
    public int Info1{ get; set; }
    public string Info2{ get; set; };
    public double Info3{ get; set; }
    public double Info4{ get; set; }
}

之后,我创建了DataPackage类,并通过SetData方法设置我的CopiedResourceNodes,我还有另一个方法:SetContent将已设置CopiedResourceNodes的新创建的DataPackage设置到Windows剪贴板中

public void CopyNode(CopiedResourceNodes resourceNode)
{
    var dataPackage = new DataPackage();
    dataPackage.SetData(ConvertTypeName, JsonConvert.SerializeObject(resourceNode));
    Clipboard.SetContent(dataPackage);
}

当我运行应用程序并希望复制时,我会收到此异常`x1c 0d1x

我感谢每一个帮助和建议。

voase2hg

voase2hg1#

报告此错误是因为DataPackage.SetData中的参数formatId,建议使用StandardDataFormats
参数formatId字符串指定数据的格式。建议您使用StandardDataFormats类设置该值。

dataPackage.SetData(StandardDataFormats.Text, JsonConvert.SerializeObject(resourceNode));

使用StandardDataFormats.TextdataPackage.SetText(),错误消失。下面的代码示例我使用try-catch来测试JsonConvert.DeserializeObject是否有异常来判断剪贴板中的数据是在外部还是在内部。
虽然你的原始代码抛出了异常,但它对程序的数据和逻辑判断没有不良影响,你的App运行不会崩溃。您也可以继续使用您的原始代码。

public void Copy(CopiedResourceNodes resourceNode)
{
    var dataPackage = new DataPackage();
    //dataPackage.SetData(StandardDataFormats.Text, JsonConvert.SerializeObject(resourceNode));
    dataPackage.SetText(JsonConvert.SerializeObject(resourceNode));
    Clipboard.SetContent(dataPackage);
}

public async Task<CopiedResourceNodes> Past()
{           
    var data = Clipboard.GetContent();   
            
    try
    {
        var json = await data.GetTextAsync();
        var pasteNode = JsonConvert.DeserializeObject<CopiedResourceNodes>(json);
        return pasteNode;
    }
    catch (Newtonsoft.Json.JsonReaderException)
    {

        return new CopiedResourceNodes() { Adders = "OutsideData", Name = "Bob" };
    }                   
            
}

相关问题