Использование FileOpenPicker с Silverlight

Windows Phone 8.1 поддерживает средства выбора открытия и сохранения файлов. Я хочу использовать средство выбора файлов с проектом, который был преобразован из WP 8 в WP 8.1 (Silverlight).

Я могу открыть FileOpenPicker следующим образом:

FileOpenPicker picker = new FileOpenPicker();
picker.FileTypeFilter.Add(".txt");
picker.PickSingleFileAndContinue(); 

Теперь все примеры, которые я нашел, используют новую универсальную среду выполнения Windows, где результирующие файлы перехватываются в App.xaml.cs следующим образом:

protected override void OnActivated(IActivatedEventArgs e) {     
    ContinuationActivatedEventArgs = e as IContinuationActivatedEventArgs; 
    if (ContinuationEventArgsChanged != null) 
    { 
        // Handle file here
    } 
} 

Проблема в том, что преобразованные приложения Silverlight не реализуют этот метод. Вместо этого я взял основную идею из другого примера для приложений Silverlight (http://msdn.microsoft.com/en-us/library/dn655125%28v=vs.105%29.aspx):

private void Application_Activated(object sender, ActivatedEventArgs e)
{
    var eventArgs = e as IContinuationActivatedEventArgs;
    if (eventArgs != null)
    {
        // Handle file here
    }
}

Но это не работает (например, eventArgs всегда NULL).

Здесь есть еще один пример: http://msdn.microsoft.com/en-us/library/windowsphone/develop/dn642086%28v=vs.105%29.aspx. При этом используется следующий метод в app.xaml.cs:

private void Application_ContractActivated(object sender, IActivatedEventArgs e)
{
        var filePickerContinuationArgs = e as FileOpenPickerContinuationEventArgs;
        if (filePickerContinuationArgs != null)
        {
        // Handle file here
        }
}

Но этот метод никогда не вызывается в моем приложении.

Есть у кого-нибудь подсказка/идея, как заставить FileOpenPicker работать с приложением Silverlight WP8.1?

С уважением,


person Hyndrix    schedule 04.05.2014    source источник
comment
Какие значения содержит e? Вы пробовали все остальные события жизни App и PhoneApplicationService? Пробовали ли вы await picker.PickSingleFileAsync()   -  person HDW Production    schedule 04.05.2014
comment
Обновление вашего обновления: вы можете попробовать вручную добавить обработчик событий в Microsoft.Phone.Shell.PhoneApplicationService.Current.ContractActivated.   -  person HDW Production    schedule 04.05.2014
comment
Спасибо! Ручное добавление обработчика событий работает. Можете ли вы опубликовать свой ответ как ответ, чтобы я мог его отметить?   -  person Hyndrix    schedule 04.05.2014
comment
Отлично, что это работает. Сделаю.   -  person HDW Production    schedule 04.05.2014


Ответы (1)


Кажется, нужно вручную добавить обработчик события в Microsoft.Phone.Shell.PhoneApplicationService.Current.ContractActivated:

Microsoft.Phone.Shell.PhoneApplicationService.Current.ContractActivated +=  Application_ContractActivated;

private void Application_ContractActivated(object sender, IActivatedEventArgs e)
{
        var filePickerContinuationArgs = e as FileOpenPickerContinuationEventArgs;
        if (filePickerContinuationArgs != null)
        {
        // Handle file here
        }
}
person HDW Production    schedule 04.05.2014
comment
Где мне нужно это событие, в App.Xaml.cs? - person Hafiz H; 22.07.2015
comment
да. Поместите код ContractActivated += ... в конструктор App.xaml.cs и обработчик событий где-нибудь в одном классе. - person HDW Production; 22.07.2015