我與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
}
你介意表現出一定的XAML? – Sevenate