2

我创建了一个 Windows Phone 应用程序,我需要创建自定义磁贴并从程序更新它

我创建了一个用户控件,

 <TextBlock x:Name="Count" Foreground="White" FontFamily="Segoe WP Bold" FontSize="80" Text="{Binding Count}" HorizontalAlignment="Right" Margin="0,0,10,0"/>
 <TextBlock HorizontalAlignment="Left" VerticalAlignment="Bottom" Margin="0,0,0,0" Grid.Row="1" Text="Tile Demo" Foreground="White" FontFamily="Segoe WP Semibold" FontSize="35" />

从我的 MainPage.xaml.cs 文件中,我绑定了计数,然后我将用户控件转换为 .jpg 文件并存储在 ISO 存储中。像下面

 public void CreateOrUpdateTile(int count) 
 {
 CustomNotificationTile frontTile = new CustomNotificationTile();
 TileData tileData = new TileData() { Count = count };
 frontTile.DataContext = tileData;

 //frontTile.Count.Text = count.ToString();

 frontTile.Measure(new Size(173, 173));
 frontTile.Arrange(new Rect(0, 0, 173, 173));
 var bmp = new WriteableBitmap(173, 173);
 bmp.Render(frontTile, null);
 bmp.Invalidate();

 var isf = IsolatedStorageFile.GetUserStoreForApplication();
 var filename = "/Shared/ShellContent/Tile.jpg";

 if (!isf.DirectoryExists("/Shared/ShellContent"))
 {
        isf.CreateDirectory("/Shared/ShellContent");
 }

 using (var stream = isf.OpenFile(filename, System.IO.FileMode.OpenOrCreate))
 {
 bmp.SaveJpeg(stream, 173, 173, 0, 100);
 }


 ShellTile TileToFind = ShellTile.ActiveTiles.FirstOrDefault(x => x.NavigationUri.ToString().Contains("TileID=2"));

 //test if Tile was created
 if (TileToFind == null)
 {
       StandardTileData NewTileData = new StandardTileData
       {
             BackgroundImage = new Uri("isostore:" + filename, UriKind.Absolute),
             BackBackgroundImage = new Uri("Application_TileImage_173x173.png", UriKind.Relative)
       };

       ShellTile.Create(new Uri("/MainPage.xaml?TileID=2", UriKind.Relative), NewTileData);
       }

 #region Update the Tile Not Working as expected

        else
        {
            StandardTileData NewTileData = new StandardTileData
            {
                BackgroundImage = new Uri("isostore:" + filename, UriKind.Absolute)
            };
            TileToFind.Update(NewTileData);
        }

        #endregion
  }

问题:

我的问题是首先我从构造函数调用以创建带有一些虚拟数据的图块,它按预期工作

但是当我尝试从其他方法更新 Tile 它不起作用时,我从 page_load 事件调用的那些方法

这些方法将从 WCF 服务中获取数据,我正在从 WCF 服务方法的完成事件中更新 Tile,如下所示

Service.getProductsCountAsync();

Service.getProductsCountCompleted += (o,e) => { 
int count = e.Result;
Dispatcher.BeginInvoke(() =>
        {
            CreateOrUpdateTile(count);
        });
};

当控制器点击上面的代码时,我只看到黑色背景的数字,Tile count 正在更新但背景颜色和 logo 正在改变,我不知道为什么会这样,但需要尽早解决。

我认为问题可能是从后台线程更新 UI,但我不知道如何克服

以下是在方法调用之前和方法调用之后拍摄的图像

更新前

服务电话后

4

1 回答 1

1

它的工作

我们必须绑定背景颜色,Logo 也像计数一样动态,即使它们是静态的

之后它按预期工作

于 2012-07-23T06:01:38.670 回答