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