Как я могу использовать привязки WPF во время печати? - PullRequest
4 голосов
/ 19 июля 2010

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

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

Есть ли обходной путь?, есть ли способ заставить привязку оценить?

1 Ответ

4 голосов
/ 22 июля 2010

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

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