2

liveTileでカスタムフォントリソースでカスタムテキストブロックをレンダリングする際に問題がありますか?ダイナミックLiveTile - バックグラウンドタスクでLiveTileのカスタムフォントTextBlockをレンダリングする

私のプロジェクトは、ライブタイルをバックグラウンドで更新します。それはパーソナライズされている必要があります。

このコードを使用しています。しかし、それはwoksではない、埋め込まれたフォントを使用しようとすると、テキストが空白になる ビットマップの背景はうまく動作します。しかし、フォントは機能しません。

「フォアグラウンドエージェント」でこの同じコードを使用すると、フォントが完全に表示されます。

Grid grid = new Grid(); 

// load your image 
StreamResourceInfo info = Application.GetResourceStream(new Uri("tile.jpg", UriKind.Relative)); 

// create source bitmap for Image control (image is assumed to be alread 173x173) 
WriteableBitmap wbmp2 = new WriteableBitmap(1, 1); 
wbmp2.SetSource(info.Stream); 
Image img = new Image(); 
img.Source = wbmp2; 

// add Image to Grid 
grid.Children.Add(img); 

TextBlock text = new TextBlock() 
{ 
    FontFamily = new FontFamily("/MyTaskAgent;component/Fonts/Fonts.zip#Buxton Sketch"), 
    Foreground = new SolidColorBrush(Colors.Black) , 
    TextWrapping = TextWrapping.Wrap, 
}; 

text.Text = "Test"; 

// this is our final image containing custom text and image 
WriteableBitmap wbmp = new WriteableBitmap(173, 173); 

// now render everything - this image can be used as background for tile 
wbmp.Render(grid, null); 
wbmp.Invalidate(); 

答えて

1

投稿されたコードに関連する問題ではありません。カスタムフォントの読み込みにかなりの時間がかかる可能性があるので、フォントがロードされる前にバックグラウンドエージェントが終了し、何もレンダリングされません。

NotifyComplete()に電話する前にレンダリングが完了していることを確認してください。

+0

...しかし?コールバックがありますか? –

+0

ありません。だから、あなたは推測する必要があります。いくつかの人工スレッドブロックを数秒間試すことができます。 –

1

私は同様の問題を抱えていたし、解決策を見つけ、見てhereまたはhere

を持ってください、私は、変換を行う前に、フォントを使用し、隠しテキストブロックを作成するいずれかの 1つまるところ、または 2 FontSourceを作成する。

今はもっと簡単だったので、最初のものを使用しました。

テキストブロックは非表示ですが、埋め込みフォントが確実に読み込まれます。私のコントロールインサイド

、私は次のように追加しました:どのように私はフォントがcompletlyロードされたことを確認することができ、私は理解して

void Grid_Loaded(object sender, RoutedEventArgs e) { 
#if SILVERLIGHT 
    Grid Grid = (Grid)sender; 
    AddFontLoaderTextBox(Grid, "Signs Road Features"); 
    AddFontLoaderTextBox(Grid, "Signs G Old"); 
    AddFontLoaderTextBox(Grid, "Signs G"); 
    AddFontLoaderTextBox(Grid, "Signs G1"); 
    AddFontLoaderTextBox(Grid, "Signs G2"); 
    AddFontLoaderTextBox(Grid, "Signs G3"); 
    AddFontLoaderTextBox(Grid, "Signs Info"); 
    AddFontLoaderTextBox(Grid, "Signs Regulatory"); 
    AddFontLoaderTextBox(Grid, "Signs Regulatory1"); 
    AddFontLoaderTextBox(Grid, "Road Manager"); 
    AddFontLoaderTextBox(Grid, "Signs Temporary"); 
    AddFontLoaderTextBox(Grid, "Road Manager"); 
    AddFontLoaderTextBox(Grid, "Signs Warning"); 
    AddFontLoaderTextBox(Grid, "Signs Warning1"); 
#endif 
} 

#if SILVERLIGHT 
void AddFontLoaderTextBox(Grid Grid, string fontName) { 

    TextBlock TextBlock = new TextBlock(); 
    TextBlock.FontFamily = new FontFamily(string.Format(
     "pack://application:,,,/ITIS.Controls.LinearViewer.Silverlight;component/Fonts/{0}.ttf#{0}", fontName)); 
    TextBlock.Opacity = 0; /* hide the text block, we only load it for the font to be cached */ 
    Grid.SetRowSpan(TextBlock, 3); /* just to ensure the text block doesn't affect the size of the first row */ 
    Grid.Children.Insert(0, TextBlock); /* keep underneath other children */ 
} 
#endif 
関連する問題