Печатайте документы с помощью Wpf-control и конвертируйте их в XPS - PullRequest
1 голос
/ 27 сентября 2010

Я пытаюсь преобразовать элемент управления XAML в документ XPS, но я хотел бы сделать это в пакетном режиме - визуализировать элемент управления в памяти и распечатать его в XPS без отображения на экране. Этот проект должен работать даже без графического интерфейса.

Я прочитал Связанные темы по stackoverflow , но он не работает должным образом. Я могу создать элемент управления, установить DataContext, но вывод xps пуст. Если я отображаю элемент управления на экране, а затем распечатываю его, все в порядке, но если я хочу сделать это в пакетном режиме, я получаю пустой документ (были только статические метки и т.

Как заставить контроль связывать элементы управления с данными?

Следующая сложная часть будет такой: как мне добавить свой настраиваемый заголовок на каждую страницу, если я распечатаю многостраничный элемент управления? (напр. список?)

1 Ответ

1 голос
/ 27 сентября 2010

Я пропускаю ваш второй вопрос, поскольку он достаточно сложен, чтобы быть автономным.

Я столкнулся с той же проблемой, но она может быть вызвана несколькими причинами.Если проблема заключается в том, что привязки еще не «сработали», решение будет немного хакерским, но его легко сделать, если вы управляете типом DataContext.Вы просто добавляете открытый или внутренний метод к своему типу, который позволяет вам запускать события PropertyChanged для каждого открытого свойства.Вот пример:

public interface IForceBinding : INotifyPropertyChanged
{
  void ForceBindings();
}

public class MyDataContext : IForceBinding
{
  public event PropertyChanged;
  private string _text;
  public string Text
  {
    get{return _text;}
    set{_text = value; OnPropertyChanged("Text");}
  }
  public void ForceBindings()
  {
    OnPropertyChanged("Text");
  }

  private void OnPropertyChanged(string propertyName)
  { 
    // you know the drill
  }
}

затем вы можете использовать его таким образом:

public void Print(MyDataContext preconfiguredContext){
  var page = new MyWpfPage();
  page.DataContext = preconfiguredContext;
  preconfiguredContext.ForceBindings();
  // write to xps

Если это не работает, вы можете столкнуться с ошибкой, когда привязки на первой страниценикогда не показывайсяМне придется немного покопаться, прежде чем я смогу найти решение этой проблемы.

...