2011-12-24 10 views
0

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でデータ連結の問題は何ですか?

答えて

0

あなたのコントロールがまだ完全には作成されておらず、作成直後にビットマップを取得できないと思います。画像の遅延取得にはDispatcher.BeginInvokeなどを使用してください。

また、このコントロールをページに追加し、コントロールの作成やビットマップのどこに問題があるのか​​確認します。これにより、問題に関する詳細情報が得られます。

関連する問題