WriteableBitmapを使用して、プログラムでインスタンス化されたUserControlをjpg/pngイメージにレンダリングして、Windows Phone 7.1プロジェクトのライブタイルの背景イメージとして使用したいが、コントロールのレンダリング時にDataBindingが期待通りに機能しない。WriteableBitmapでUserControl + ItemsControlをレンダリングするときにデータバインディングがありませんか?
一般に、ユーザーコントロールは、このようなものです:私は今、PhoneApplicationPageに、このコントロールを配置し、ユーザーコントロールのDataContextプロパティに私のデータ構造の項目にリストを割り当てると
<UserControl>
<Grid x:Name="LayoutRoot" Height="173" Width="173" >
<Grid.Background >
<SolidColorBrush Color="{StaticResource PhoneAccentColor}" />
</Grid.Background >
<Grid.RowDefinitions>
<RowDefinition Height="27"/>
<RowDefinition Height="146"/>
</Grid.RowDefinitions >
<ItemsControl Grid.Row="1" Margin="10,0,0,0" ItemsSource="{Binding}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding MyBindingProperty, FallbackValue=xxx}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
<TextBlock Text="Hello World" FontSize="22" Margin="5,0,0,0"/>
<TextBlock TextWrapping="Wrap" Text="{Binding Count, FallbackValue=-1}" FontSize="18.667" Margin="123,0,0,0"/>
</Grid>
</UserControl>
、すべての作品各リストアイテムに対して1つのTextBlockが表示され、そのTextBlockのTextプロパティが自分のデータ構造のプロパティの値を正しく表示しています。また、グリッド上の最後のTextBlockは、リスト項目の現在の数を正しく表示します。
しかし、私は現在、そのUserControlを作成し、同じリストをDataContextに割り当て、WriteableBitmapを使用してイメージファイルにレンダリングしようとすると、ItemsControlのDataTemplate内のすべてのDataBindingが、彼らは今、FallbackValueを表示しています。グリッド内の外部TextBlockのデータバインディングはまだ完全に動作していますが、StackPanel(=バインドされたリスト内のアイテム)に正しい数のTextBlockがあります。ここで
はWriteableBitmapを作成するための私のコードです:
var tile = new MyTileControl { DataContext = this._myList };
tile.Arrange(new Rect(0, 0, 173, 173));
tile.Measure(new Size(173, 173));
var bmp = new WriteableBitmap(173, 173);
bmp.Render(tile, null);
bmp.Invalidate();
WriteableBitmapてレンダリングし、どのように私はそれを解決することができますするDataTemplateでデータ連結の問題は何ですか?