Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 将可视控件保存到Xps文件时出现问题_Wpf_Controls_Xps - Fatal编程技术网

Wpf 将可视控件保存到Xps文件时出现问题

Wpf 将可视控件保存到Xps文件时出现问题,wpf,controls,xps,Wpf,Controls,Xps,我制作了一个控件,显示DataGrid中的一些数据。 在窗口内使用时,它可以正常工作。 当我将其写入Xps文件时,头会移位,而 输出错误。 要将其写入XPS,我需要创建我的控件,然后填写它需要显示的数据 我用了这个帖子: 将控件输出到Xps文件 我试图将HeaderRowTemplate设置为固定大小,但没有结果 我还尝试在数据更新后更新布局,但没有结果 列和行是动态计算的,这取决于哪些数据是非空的 (Rq:垂直和水平属性不相同) 下面是窗口中加载了一些数据的控件的外观: 还有一个由该控件生成

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

我用了这个帖子: 将控件输出到Xps文件

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

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

列和行是动态计算的,这取决于哪些数据是非空的

(Rq:垂直和水平属性不相同)

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

还有一个由该控件生成的xps文件的屏幕截图


编辑:我终于找到了解决这个问题的方法:我添加了一个“打印预览”窗口,在其中显示控件——不管怎样,哪个用户喜欢它——并且我“打印”了这个(正确的)窗口内容。

我对
DataGrid
也有同样的问题,并确定
DataGridColumn
的动态宽度(*)是邪恶的根源。在实时应用程序中,一切似乎都很好,但在转换为XPS后,宽度被忽略。我的
DataGrid
的总宽度是固定的,因此对我来说,设置一个固定的宽度
newdatagridlength(80.0)
就是一个例子。默认情况下,它是星形宽度(1*)。为了能够定义关系列,我编写了一个
MarkupExtension
,它可以获得可用的宽度、列数和“星数”:

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

你介意显示一些Xaml吗?Thx很多,我解决了这个问题,首先在“预览”窗口中显示控件(事实上我这样做只是为了这个),然后导出正确的视觉效果。但您的解决方案似乎更简洁/一般。也许你可以复制你做的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  
}