2011-12-24 1 views
0

Je souhaite utiliser un WriteableBitmap pour convertir un UserControl par programme instancié en une image jpg/png afin de l'utiliser en tant qu'image d'arrière-plan dynamique dans un projet Windows Phone 7.1, mais DataBinding ne fonctionne pas comme prévu lors du rendu du contrôle.Aucune DataBinding lors du rendu d'un objet UserControl + ItemsControl dans WriteableBitmap?

En général, le UserControl est quelque chose comme ceci:

<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> 

Quand je mets maintenant ce contrôle sur un PhoneApplicationPage et lui attribuer une liste avec des éléments de ma structure de données à la propriété DataContext des UserControl, tout fonctionne bien et je vois un TextBlock pour chaque élément de la liste et la propriété Text de ce TextBlock affiche correctement la valeur de la propriété de ma structure de données. Le dernier TextBlock de la grille affiche également correctement le nombre actuel d'éléments de liste. MAIS quand j'essaye maintenant de créer par programme ce UserControl, assigner la même liste au DataContext et employez alors un WriteableBitmap pour le rendre à un fichier d'image, il semble que toutes les DataBindings dans le DataTemplate du ItemsControl soient ' Ils ne fonctionnent plus, ils affichent maintenant le FallbackValue. Bien que le DataBinding du TextBlock externe dans la grille fonctionne toujours parfaitement et j'ai également obtenu le nombre correct de TextBlocks dans le StackPanel (= éléments dans la liste liée).

Voici mon code pour créer le l'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(); 

Quel est le problème avec les DataBindings dans le DataTemplate lors du rendu par un WriteableBitmap et comment puis-je résoudre?

Répondre

0

Je pense que votre contrôle n'est pas encore entièrement créé, et vous ne pouvez pas récupérer de bitmap juste après la création. Essayez d'utiliser Dispatcher.BeginInvoke ou autre chose pour saisir l'image différée.

Aussi, ajoutez ce contrôle à votre page et regardez où est un problème - dans la création de contrôle ou dans l'image bitmap? Cela vous donne plus d'informations sur un problème.

Questions connexes