1

我正在尝试将 XAML 控件转换为 XPS 文档,但我想以批处理模式执行此操作 - 在内存中呈现控件并将其打印到 XPS 而不在屏幕上呈现它。即使没有 GUI,这个项目也应该可以工作。

我已阅读有关 stackoverflow的相关主题,但它无法正常工作。我可以创建控件,设置 DataContext,但输出 xps 为空。如果我在屏幕上呈现控件然后打印它,一切都很好,但如果我想在批处理模式下执行此操作,我得到的是空文档(只有静态标签等)

如何强制控件将控件与数据绑定?

下一个困难的部分是:如果我打印长多页控件,如何在每一页上添加我的自定义标题?(例如清单?)

4

1 回答 1

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

如果这不起作用,您可能会遇到第一页上的绑定永远不会显示的错误。在我重新找到解决方案之前,我必须挖掘一段时间。

于 2010-09-27T19:41:07.437 回答