【问题标题】:Issue when saving control Visual to Xps file将控件 Visual 保存到 Xps 文件时出现问题
【发布时间】:2013-09-09 16:30:44
【问题描述】:

我制作了一个控件,它在 DataGrid 中显示一些数据。
在窗口中使用时,它可以正常工作。
当我将它写入 Xps 文件时,标题会移动,并且 输出错误。 要将其写入 XPS,我创建了我的控件,然后填写它需要显示的数据。

我使用了这个帖子:Convert WPF (XAML) Control to XPS Document 将控件输出到 Xps 文件。

我尝试将 HeaderRowTemplate 设置为固定大小,但没有结果。

我也尝试在数据更新后更新布局,但没有结果。

根据哪些数据不为空,动态计算列和行。

(Rq : 垂直和水平属性不一样)

以下是加载了一些数据的控件的外观在窗口中

还有从这个控件生成的xps 文件的屏幕截图。

编辑:我终于找到了解决此问题的方法:我添加了一个“打印预览”窗口,其中显示了控件 - 无论如何用户都喜欢 - 并且我“打印”这个(正确的)窗口内容。

【问题讨论】:

  • 您介意展示一些 Xaml 吗?

标签: wpf controls xps


【解决方案1】:

我对@9​​87654321@ 也有同样的问题,并确定DataGridColumn 的动态宽度(*) 是万恶之源。在实时应用程序中,一切似乎都很好,但在转换为 XPS 后,宽度被忽略了。我的DataGrid 的整体宽度是固定的,所以对我来说,例如设置一个固定宽度new DataGridLength(80.0) 就可以了。默认情况下,它是星形宽度 (1*)。为了能够定义关系列,我写了一个MarkupExtension,它获取可用宽度、列数和“星数”:

<DataGridColumn Width="{local:MyWidth Amount=0.5, Columns=5, TotalWidth=800}" />

此示例伤口的计算为:TotalWidth / Columns * Amount。 这在 XPS 打印中效果很好。您还可以通过一些爬树计算总宽度和列数,并直接在扩展中解决它(ActualWidth 和 Columns.Count)。

编辑:这是MarkupExtension的可能实现

[MarkupExtensionReturnType(typeof(double))]
public class MyWidth : MarkupExtension
{
    #region Constructors (2) 

    public MyWidth(double amount, int columns, double totalWidth)
    {
        this.Amount = amount;
        this.Columns = columns;
        this.TotalWidth = totalWidth;
    }

    public MyWidth() { }

    #endregion Constructors 

    #region Properties (3) 

    [ConstructorArgument("amount")]
    public double Amount { get; set; }

    [ConstructorArgument("columns")]
    public int Columns { get; set; }

    [ConstructorArgument("totalWidth")]
    public double TotalWidth { get; set; }

    #endregion Properties 

    #region Methods  (1) 

    public override object ProvideValue(IServiceProvider serviceProvider)
    {
        return this.TotalWidth / (double)this.Columns * this.Amount;
    }

    #endregion Methods  
}

【讨论】:

  • 非常感谢,我通过首先在“预览”窗口中显示控件(实际上我这样做只是为了这个),然后导出正确的视觉效果来解决这个问题。但是您的解决方案似乎更清洁/一般情况。也许您可以复制您制作的 MarkupExtension,它可能对其他人有用?
  • 嗯,这很简单,但我会将其添加到帖子中;)谢谢。
猜你喜欢
  • 2011-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-20
  • 2012-03-09
  • 1970-01-01
相关资源
最近更新 更多