2012-05-03 2 views
0

У меня есть метод, который выполняется в Application_Deacitvated/Closing().Не удается получить динамически сгенерированную работу плитки (Windows Phone)

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; 
    } 

Итак, как вы можете видеть, я хочу создать плитки с моим текстом в его центре с изображением фона «BackBackgroundTheme.png». Эта плитка, которую я пытаюсь сохранить в IsolStorage и назначить ей BackBackgroundImage.

Но это не работает. Плитка перевернулась, но BackBackground полностью черная. Я загрузил этот управляемый фон, и кажется, что это действительно черный ящик. Итак, как заставить его работать?

+1

Вы ступили через него убедившись, его ударом всего кода? На первый взгляд все выглядит правильно. – Etch

+0

Да, я установил точку останова для каждой отдельной строки, и кажется, что вся строка выполнена правильно. – Andrzej

+0

Небольшое изменение, я добавил «использование» после «tileImage.Invalidate();» и теперь плитка перевернулась, но BackBackground полностью черная. – Andrzej

ответ

0

я, наконец, выяснили, где проблема.

Кажется, что генерация изображения плитки не выполнена должным образом в Application_Closing/Deactivating(). Поэтому я переместил процесс генерации изображений где-то еще, и теперь, когда приложение закрывается/дезактивируется, я просто устанавливаю ранее сгенерированное изображение в плитку.

0

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

+0

Не работает. Все еще получаю этот черный фон. – Andrzej

+0

У меня нет моего кода, который я написал, который делает это доступным для меня прямо сейчас, но у меня есть URL-код кода, который я использовал, чтобы заставить меня прокатиться. https://github.com/Windcape/Diverse/blob/master/LocalLiveTileExample/LocalLiveTileExample/TileGenerator.cs – Etch

+0

Ну, я загрузил это изображение из isostore в приложении, и кажется, что это просто черный ящик! : O Так кажется, что это проблема с созданием этого изображения, а не с его назначением. – Andrzej

0

Попробуйте это:

canvas.Children.Add(tileImageData); 
canvas.UpdateLayout(); 
     // Saving tile image. 
     WriteableBitmap tileImage = new WriteableBitmap(173, 173); 
Смежные вопросы