我正在尝试将XAML控件转换为XPS文档,但我想在批处理模式下执行此操作 - 在内存中渲染控件并将其打印到XPS而不在屏幕上呈现它。即使没有GUI,这个项目也应该可以工作。
我看过Related topic on stackoverflow,但它无法正常工作。我可以创建控件,设置DataContext,但输出xps为空。如果我在屏幕上渲染控制然后打印它,一切都很好,但如果我想在批处理模式下这样做,我得到空文件(只有静态标签等)。
如何强制控制将控件与数据绑定?
下一个难点将是:如果我打印长多页控件,如何在每个页面上添加我的自定义标题? (例如,列表?)
答案 0 :(得分:1)
我正在跳过你的第二个问题,因为它很复杂,不能独立。
我遇到了同样的问题,但可能是由几件不同的事情引起的。
如果问题是因为绑定还没有被“绊倒”,那么解决方案有点hacky但是如果您控制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
如果这不起作用,您可能会遇到第一页上的绑定从未显示的错误。在我重新找到解决方案之前,我必须挖掘一段时间。