No se puede hacer funcionar el mosaico generado dinámicamente (Windows Phone)

Tengo el método, que se ejecuta en Application_Deacitvated/Closing().

public bool createBackTile()
    {
        if(AlarmClock.IsExists())
        {

            ImageBrush background = new ImageBrush()
            {
                ImageSource = new BitmapImage(new Uri("/BackBackgroundTheme.png", UriKind.Relative)),
                AlignmentX = AlignmentX.Center,
                AlignmentY = AlignmentY.Center
            };

            // Preparing tile image.
            TextBox tileImageData = new TextBox()
            {
                Text = AlarmClock.Read().ToShortTimeString(),
                FontSize = 45,
                FontWeight = FontWeights.Bold,
                Foreground = new SolidColorBrush(Colors.White),
                //Background = background,
                Height = 173,
                Width = 173,
                HorizontalContentAlignment = HorizontalAlignment.Center,
                VerticalContentAlignment = VerticalAlignment.Center,
                Padding = new Thickness(-12),
                Margin = new Thickness(0),
                Clip = new RectangleGeometry { Rect = new Rect(0, 0, 173, 173) }
            };

            Canvas canvas = new Canvas()
            {
                Width = 173,
                Height = 173,
                Background = background,
                Margin = new Thickness(0)
            };

            canvas.Children.Add(tileImageData);

            // Saving tile image.
            WriteableBitmap tileImage = new WriteableBitmap(173, 173);
            tileImage.Render(canvas, null);
            tileImage.Render(tileImageData, null);
            tileImage.Invalidate();
            using(var stream = IsolatedStorageFile.GetUserStoreForApplication().CreateFile("/Shared/ShellContent/BackBackground.jpg"))
            {
                tileImage.SaveJpeg(stream, 173, 173, 0, 100);
            }

            // Sets data for tile.
            StandardTileData tileData = new StandardTileData()
            {
                BackgroundImage = new Uri("BackgroundAlarmSet.png", UriKind.Relative),
                BackBackgroundImage = new Uri(@"isostore:/Shared/ShellContent/BackBackground.jpg"),
                BackContent = "",
                BackTitle = "",
            };

            // Sets tile.
            ShellTile.ActiveTiles.FirstOrDefault().Update(tileData);

            return true;
        }

        return false;
    }

Entonces, como puede ver, quiero generar un mosaico con mi texto en el centro con el fondo de la imagen "BackBackgroundTheme.png". Ese mosaico que estoy tratando de guardar en IsolatedStorage y asignarlo a BackBackgroundImage.

Pero no funciona. El mosaico se voltea, pero el fondo de fondo es completamente negro. He cargado este fondo manipulado y parece que es solo una caja negra. Entonces, ¿cómo hacer que funcione?

preguntado el 03 de mayo de 12 a las 19:05

¿Lo has revisado asegurándote de que está llegando a todo tu código? A simple vista todo parece correcto. -

Sí, he establecido un punto de interrupción para cada línea y parece que todas las líneas se ejecutan correctamente. -

Pequeño cambio, agregué "usar" después de "tileImage.Invalidate();" y ahora el mosaico se está volteando, pero el BackBackground es completamente negro. -

3 Respuestas

Tratar: BackgroundImage = new Uri(@"isostore:/Shared/ShellContent/BackBackground.jpg", UriKind.Absolute)

contestado el 03 de mayo de 12 a las 20:05

No tengo mi código que escribí que hace esto disponible para mí en este momento, pero tengo la URL del código que usé para ponerme en marcha. github.com/Windcape/Diverse/blob/master/LocalLiveTileExample/… - Grabar al agua fuerte

Bueno, he cargado esta imagen de isostore en la aplicación y parece que, de hecho, ¡es solo una caja negra! :O Parece que ese es el problema de crear esta imagen, no de asignarla. - Andrzej

Finalmente he descubierto dónde está el problema.

Parece que la generación de la imagen del mosaico no se realiza correctamente en Application_Closing/Deactivating(). Así que moví la generación de imágenes a otro lugar y ahora, cuando la aplicación se está cerrando/desactivando, solo configuro la imagen generada previamente en un mosaico.

contestado el 04 de mayo de 12 a las 12:05

Prueba esto:

canvas.Children.Add(tileImageData);
canvas.UpdateLayout();
        // Saving tile image.
        WriteableBitmap tileImage = new WriteableBitmap(173, 173);

Respondido el 04 de Septiembre de 13 a las 11:09

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.