2013-03-29 2 views
1

Je crée une application dans laquelle je partage un tracé InkManager en enregistrant d'abord le contour d'inkmanager sur le paramètre local, puis en le lisant en tant que flux et partage.Impossible de partager l'image bitmap et le contenu HTML ensemble?

Maintenant, le contenu HTML est partagé, mais aucune image n'est jointe à l'e-mail. Si je commente le code pour partager html, l'image est attachée lors du partage via l'application de messagerie. Mais les deux ne sont pas partagés à la fois. Comment puis-je atteindre cet objectif???

code:

DataPackage requestData = request.Data; 
       requestData.Properties.Title =  this.PageViewModel.JobInformationDetail.JobNumber; 
       requestData.Properties.Description = this.PageViewModel.JobInformationDetail.CustomerSignatureName; 
       //requestData.SetText("Sample Text"); 

       RandomAccessStreamReference signatureStream = await GetInkManagerStream(); 

       if (signatureStream != null) 
       { 
        requestData.SetBitmap(signatureStream); 
       } 

       requestData.SetHtmlFormat(Windows.ApplicationModel.DataTransfer.HtmlFormatHelper.CreateHtmlFormat(this.GetMailDescription())); 

InkManager Convertir flux

private async Task<RandomAccessStreamReference> GetInkManagerStream() 
    { 
     IRandomAccessStream signatureStream = null; 

     StorageFile myMerge = await ApplicationData.Current.LocalFolder.CreateFileAsync("sign.png", CreationCollisionOption.OpenIfExists); 
     IOutputStream signature = await myMerge.OpenAsync(FileAccessMode.ReadWrite); 

     if (signature != null) 
     { 
      await _inkManager.SaveAsync(signature); 
      signature.Dispose(); 
     } 

     signatureStream = await myMerge.OpenAsync(FileAccessMode.ReadWrite); 
     RandomAccessStreamReference streamRef = RandomAccessStreamReference.CreateFromStream(signatureStream); 
     signatureStream.Dispose(); 

     return streamRef; 
    } 

Répondre

2

Le problème est dû à l'attente d'une méthode async dans votre gestionnaire d'événements DataRequested. Si vous faites cela, vous devez utiliser DataRequestReferral:

private async void OnDataRequested(DataTransferManager sender, DataRequestedEventArgs args) 
{ 
    var deferral = args.Request.GetDeferral(); 

    // the rest of your method, including the awaiting call 

    deferral.Complete(); 
} 

En faisant cela, vous dire l'appelant qu'il a besoin d'attendre un appel async pour terminer avant de poursuivre. À la fin vous le signalez pour continuer en appelant deferral.Complete(). Sans cela, l'appelant continue avant que vous définissiez réellement le bitmap, donc l'erreur.

EDIT:

app Windows 8 Mail n'est pas une cible d'actions pour les images partagées comme celui-ci, cependant. Pour l'application Mail soit disponible, vous devez partager l'image comme un élément de stockage:

var file = await ApplicationData.Current.LocalFolder.GetFileAsync(@"sign.png"); 
var imageItems = new List<IStorageItem>(); 
imageItems.Add(file); 
requestData.SetStorageItems(imageItems); 

Maintenant Mail apparaître comme une des cibles disponibles. Lorsque vous partagez des images, il est préférable d'utiliser à la fois SetBitmap() et SetStorageItems() pour obtenir davantage de cibles de partage, car toutes les applications ne prennent pas en charge les deux types de données.

EDIT 2:

également l'application Mail ne capte que d'un type de contenu partagé, HTML ou StorageItems (si aucun HTML est fourni) que vous avez déjà remarqué. La seule solution que je connaisse, est d'intégrer les images dans le contenu HTML:

var resourceName = "logo.png"; 
var html = String.Format("<p>HTML content</p><img src='{0}'/>", resourceName); 
requestData.ResourceMap[resourceName] = RandomAccessStreamReference.CreateFromUri(
    new Uri("ms-appdata:///local/sign.png")); 
requestData.SetHtmlFormat(HtmlFormatHelper.CreateHtmlFormat(html)); 

Vous pouvez en savoir plus sur cette approche dans un blog post by Mike Taulty.

+0

Je l'ai fait aussi sur la page de partage, mais l'image ne se joint pas .... son être enregistré dans le dossier Image, mais pas attaché ... –

+0

@BalrajSingh Où voulez-vous l'attacher? Quelle cible avez-vous en tête? –

+0

Email J'ai besoin de joindre et de l'envoyer par ce biais. –

Questions connexes