私はWindows Phoneの天気アプリケーションに取り組んでいます。私が利用したい機能の1つはライブタイルです。私は、ユーザーがスタートページに都市をピン留めするときに実行されるバックグラウンドエージェントを持っています。 固定された後、天気データを取得するためにインターネットに電話をかけます。これらはすべてうまくいきます。カスタムライブタイル更新の問題
問題が発生しました。 返される天気データに応じて、開始画面に固定されているタイルを更新したいとします。 私は、各タイルを表すいくつかの異なる.xamlファイル(雨、雪、太陽など)を持っています。 私の最初の考えは、私はというものであった:
- は各タイル上の2つのプロパティ(シティステイトとTemp)に
- を公開タイルを作成した後に、これらの2つのプロパティを設定します。
- タイルをIsolatedStorageにイメージとして保存してから、開始画面のタイルを更新することができます。
ここで私はことをしなければならないコードです:だから
var ctl = new Snow();
//just some dummy data to test
ctl.CityState = "Test, NY";
ctl.Temp = 25;
ctl.Measure(new Size(173, 173));
ctl.Arrange(new Rect(0, 0, 173, 173));
var bmp = new WriteableBitmap(173, 173);
bmp.Render(ctl, null);
bmp.Invalidate();
var iss =IsolatedStorageFile.GetUserStoreForApplication();
var filename = "/Shared/ShellContent/tileTest.jpg";
using (var stm = iss.CreateFile(filename))
{
bmp.SaveJpeg(stm, 173, 173, 0, 80);
}
tile.BackgroundImage = new Uri("isostore:" + filename, UriKind.Absolute);
var tileToUpdate = ShellTile.ActiveTiles.FirstOrDefault(r => r.NavigationUri == uri);
tileToUpdate.Update(tile);
を、これが実行されるとき、それはXAMLファイルから新しいタイルを作成し、スタート画面を更新しますが、温度やシティステイト性質が は新しいタイルには反映されません。 xamlにはコードビハインドのプロパティにバインドされた2つのテキストブロックがあります。私はまた を実装しましたINotifyPropertyChanged。 は、ここでは、正しいXAMLファイルをインスタンス化し、それをディスクに保存し、
<UserControl
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
x:Name="Window"
x:Class="ezweather.services.tiles.Snow"
d:DesignWidth="480" d:DesignHeight="800" Width="173" Height="173" >
<Canvas x:Name="Layer_1" Width="173" Height="173" Canvas.Left="0" Canvas.Top="0" >
<Rectangle x:Name="Rectangle" Width="173" Height="173" Canvas.Left="0" Canvas.Top="-1.52588e-005" Stretch="Fill" Fill="#FF3F6A8D"/>
<TextBlock x:Name="cityState" TextAlignment="Left" FontFamily="Segoe UI Semibold" FontWeight="Bold" FontSize="15" Width="Auto" Height="Auto" Canvas.Left="0" Canvas.Top="0">
<TextBlock.RenderTransform>
<TransformGroup>
<MatrixTransform Matrix="1.33333,0,0,1.33333,11,139.5"/>
</TransformGroup>
</TextBlock.RenderTransform>
<Run Text="{Binding ElementName=Window, Path=CityState}" Foreground="#FFFFFFFF"/>
</TextBlock>
<TextBlock x:Name="temp" TextAlignment="Right" FontFamily="Segoe UI Light" FontSize="44" Width="Auto" Height="Auto" Canvas.Left="0" Canvas.Top="0">
<TextBlock.RenderTransform>
<TransformGroup>
<MatrixTransform Matrix="1.33333,0,0,1.33333,87.57,42.9333"/>
</TransformGroup>
</TextBlock.RenderTransform>
<Run Text="{Binding ElementName=Window, Path=Temp}" Foreground="#FFFFFFFF"/>
</TextBlock>
</Canvas>
</UserControl>
XAML
であり、ここで、このコードが実行されると分離コードpublic partial class Snow : UserControl, INotifyPropertyChanged
{
public Snow()
{
// Required to initialize variables
InitializeComponent();
}
private string _cityState;
private int _temp;
public string CityState
{
get { return _cityState; }
set
{
_cityState = value;
RaisePropertyChanged("CityState");
}
}
public int Temp
{
get { return _temp; }
set
{
_temp = value;
RaisePropertyChanged("Temp");
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected void RaisePropertyChanged(string property)
{
if(PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(property));
}
}
です。 開始画面でタイルを更新しますが、CityStateとTempのデータは表示されません。
CityStateとTempのデータがイメージで書き出されない理由はわかりません。 私は何が欠けていますか?