Печатайте документы через Wpf-контроль и конвертируйте их в XPS
Я пытаюсь преобразовать элемент управления XAML в документ XPS, но я хотел бы сделать это в пакетном режиме - отобразить элемент управления в памяти и распечатать его в XPS, не отображая его на экране. Этот проект должен работать даже без графического интерфейса.
Я прочитал статью по теме на stackru, но она не работает должным образом. Я могу создать элемент управления, установить DataContext, но вывод xps пуст. Если я отображаю элемент управления на экране, а затем печатаю его, все в порядке, но если я хочу сделать это в пакетном режиме, я получил пустой документ (были только статические метки и т. Д.)
Как я могу заставить контроль связывать элементы управления с данными?
Следующая сложная часть будет: как я могу добавить свой собственный заголовок на каждую страницу, если я распечатаю многостраничный элемент управления? (напр. список?)
1 ответ
Я пропускаю ваш второй вопрос, поскольку он достаточно сложен, чтобы быть автономным.
Я столкнулся с той же проблемой, но она может быть вызвана несколькими причинами.
Если проблема заключается в том, что привязки еще не "сработали", решение будет немного хакерским, но его легко сделать, если вы управляете типом 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
Если это не работает, вы можете столкнуться с ошибкой, когда привязки на первой странице никогда не отображаются. Мне придется немного покопаться, прежде чем я смогу найти решение этой проблемы.