我遇到了同样的问题,DataGrid
并确定了动态宽度(*)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
}