2010-07-19 2 views
4

Кажется не все привязки должны оцениваться при печати. Например, в приведенном ниже коде только первая кнопка имеет контент = «100», другие кнопки имеют контент = «0».Как я могу использовать привязки WPF во время печати?

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(); 

Есть ли обходной путь?

Например, существует способ принудительного привязки для оценки?

ответ

4

Вы пробовали убедиться, что диспетчер простаивает до вызова collator.EndBatchWrite(). Нечто вроде:

Dispatcher.CurrentDispatcher.Invoke(
    new Action(delegate { }), DispatcherPriority.ApplicationIdle, null); 
Смежные вопросы