2015-08-03 13 views
7

Scrivo un'applicazione universale Windows C# in cui l'utente può copiare un file negli Appunti. Ma se l'App è chiusa, il contenuto degli appunti si perde. L'usabilità è orribile se l'utente può perdere il suo contenuto degli appunti così facilmente. C'è un modo per rendere persistente il contenuto degli appunti dell'App come in qualsiasi altra classica applicazione Windows?Contenuto degli Appunti di Windows Universal App chiusa

codice di esempio:

public static void CopyFileToClipboard(StorageFile file) { 
    DataPackage dp = new DataPackage(); 
    dp.RequestedOperation = DataPackageOperation.Copy; 
    dp.SetStorageItems(new List<StorageFile>() { file }); 
    Clipboard.SetContent(dp); // not available after app closed 
    Clipboard.Flush(); 
} 

public static void CopyTextToClipboard(string text) { 
    DataPackage dp = new DataPackage(); 
    dp.RequestedOperation = DataPackageOperation.Copy; 
    dp.SetText(text); // available after app closed 
    Clipboard.SetContent(dp); 
    Clipboard.Flush(); 
} 

//I have tried to copy the file to the app folder first but it has nothing changed. 
public async static void CacheAndCopyFileToClipboard(StorageFile file) { 
    DataPackage dp = new DataPackage(); 
    dp.RequestedOperation = DataPackageOperation.Copy; 
    var xfile = await ApplicationData.Current.LocalFolder.CreateFileAsync(file.Name); 
    await file.CopyAndReplaceAsync(xfile); 
    dp.SetStorageItems(new List<StorageFile>() { xfile }); 
    Clipboard.SetContent(dp); // not available after app closed 
    Clipboard.Flush(); 
} 

Quindi la domanda è: come posso mettere un file di appunti in modo che gli utenti possano incollarlo anche se l'App è chiusa?

Modifica: Sembra che sia un problema di tutte le applicazioni universali di Windows, ad esempio se si copia un'immagine nell'app Foto di Windows è possibile incollarla solo mentre è in esecuzione l'app fotografica. Non riesco a immaginare che questo strano comportamento debba essere il comportamento predefinito di Apps. Sembra più un insetto perché non vedo ragioni per questo strano comportamento.

Edit2: Nuovo esempio del problema (grazie a Joe300 per il suo feedback). Funziona con le stringhe ma non con uno StorageFile (anche se prima viene copiato nella cartella dell'app locale). Qual è la ragione per cui il comando Flush() non funziona con i file? C'è qualcosa di speciale da considerare quando i file usati (permessi, ...)?

risposta

2

È necessario aggiungere una chiamata a Flush in modo che il contenuto sia disponibile dopo l'arresto dell'applicazione.

Aggiunge il contenuto negli Appunti e rilascia l'oggetto DataPackage dall'app di origine. Questo metodo consente al contenuto di rimanere disponibile dopo l'arresto dell'applicazione.

Si dovrebbe anche impostare la RequestedOperation:

dp.RequestedOperation = DataPackageOperation.Copy; 
try 
{ 
    Windows.ApplicationModel.DataTransfer.Clipboard.SetContent(dp); 
    Clipboard.Flush(); 
} 
catch (Exception ex) 
{ 
    // Copying data to Clipboard can potentially fail - for example, if another application is holding Clipboard open     
} 

Al di là di questo, non ci sono davvero tutte le altre opzioni per la manipolazione del Clipboard.

+0

Non ha risolto il problema se chiudo l'app il file è perso. Call Clipboard.Flush() non ha modificato questo aspetto sebbene la descrizione di questo comando sia simile a questa è la soluzione. Forse questo è un problema con gli oggetti StorageFile perché sembra che funzioni con le stringhe. – ctron

+0

Come stai inizializzando 'StorageFile'? – WiredPrairie

+0

dp.Flush(); non esiste nel DataPackage solo negli Appunti. StorageFile e SetContent non dovrebbero essere il problema perché tutto funziona perfettamente mentre l'app è in esecuzione, ma se l'app è chiusa, gli appunti hanno perso il contenuto. Le estensioni Flush e DataPackageOperation.Copy al mio codice originale non risolvono questo problema ... – ctron

Problemi correlati