2010-07-19 2 views
4

Il semble pas toutes les reliures sont à évaluer lors de l'impression. Par exemple, dans le code ci-dessous, seul le premier bouton a le contenu = "100", les autres boutons ont le contenu = "0".Comment puis-je utiliser les liaisons WPF pendant l'impression?

var doc = new XpsDocument("test.xps",FileAccess.Write); 
var writer = XpsDocument.CreateXpsDocumentWriter(doc); 
var collator = writer.CreateVisualsCollator(); 
collator.BeginBatchWrite(); 
for (int i = 0; i < 3; i++) 
{ 
    var button = new Button(); 
    button.SetBinding(ContentControl.ContentProperty, 
     new Binding 
     { 
      RelativeSource = new RelativeSource(RelativeSourceMode.Self), 
      Path = new PropertyPath("ActualWidth") 
     }); 
    button.Measure(new Size(100, 100)); 
    button.Arrange(new Rect(0, 0, 100, 100)); 
    button.Width = 100; 
    button.Height = 100; 
    collator.Write(button); 
} 
collator.EndBatchWrite(); 
doc.Close(); 

Y a-t-il une solution de contournement? Par exemple, existe-t-il un moyen de forcer l'évaluation de la liaison?

Répondre

4

Avez-vous essayé de vous assurer que le répartiteur est inactif avant l'appel de collator.EndBatchWrite(). Quelque chose comme:

Dispatcher.CurrentDispatcher.Invoke(
    new Action(delegate { }), DispatcherPriority.ApplicationIdle, null); 
Questions connexes