none
应用作为分享源分享单个文件的求助 RRS feed

  • 问题

  • 我参照Sharing content source app sample为我的应用增加分享文件功能。可是遇到一个问题,如下图所示:

    相关代码如下:

    //注册数据请求事件
    dataRequestedToken = DataTransferManager::GetForCurrentView()->DataRequested += ref new TypedEventHandler<DataTransferManager^, DataRequestedEventArgs^>(this, &OpenPage::OnDataRequested);
    //选择一个文件
    	auto openPicker = ref new FileOpenPicker();
    	openPicker->ViewMode = PickerViewMode::List;
        openPicker->SuggestedStartLocation = PickerLocationId::DocumentsLibrary;
        openPicker->FileTypeFilter->Append(".pdf");
    
    	task<StorageFile^>(openPicker->PickSingleFileAsync()).then([this](StorageFile^ openedFile)
    	{
    		if (openedFile != nullptr)
    		{
    			storageItem = openedFile;
                    }
            });
    //响应数据请求事件
    void OpenPage::OnDataRequested(DataTransferManager^ sender, DataRequestedEventArgs^ e)
    {
        auto requestData = e->Request->Data;
        
        if (storageItem != nullptr)
        {
    		requestData->Properties->Title = "myApp";
    		requestData->Properties->Description = storageItem->Name;
    		requestData->SetData(StandardDataFormats::StorageItems ,storageItem);
    		
        }
    }
    

    请问我哪里出错了呢?

    谢谢。

    2012年4月12日 7:27

全部回复

  • StandardDataFormats::StorageItems 这里是个复数,所以应该是一个集合,你给他的只是一个 StorageFile, 所以不对。你按照例子上用的PickMultipleFilesAsync方法拿到选择的文件集合。


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年4月13日 9:32
    版主
  • 谢谢你的答复!

    可是我只想分享单个文件,不想用PickMultipleFilesAsync让用户可能选择多个文件。PickMultipleFilesAsync返回的是IVectorView<StorageFile^>^,可是我发现IVectorView没有append的方法,我也试过使用IVector的append方法添加单个StorageFile^,然后requestData->SetStorageItems(dynamic_cast<IIterable<IStorageItem^>^>(storageItems->GetView()));可是这句会Crash。

    难道没有直接分享PickSingleFileAsync返回的StorageFile^的方法吗?

    2012年4月13日 9:55
  • 从文档 http://msdn.microsoft.com/library/windows/apps/BR207851 上看,他返回一个 IReadOnlyList, 所以不支持Append。

    你可以参考 http://msdn.microsoft.com/en-us/library/windows/apps/hh738430 直接封装一个 IIterable<T> 的集合,所以 IVector<T> 应该是可以的,不过你可以试试不需要取他的View, 还有 SetStorageItems 的第二个参数是否需要设置为 True。


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年4月17日 4:02
    版主
  • 你好。已经按照你说的方法尝试,结果还是不行。

    请问这是否是一个bug?如果不是,那么能否提供一个切实可行的方法,用来分享用户选择的单个文件呢?

    谢谢!

    2012年4月18日 2:01