2013-06-19 37 views
-1

我做了一個控件,它顯示了DataGrid中的一些數據。
在窗口內使用時,它的工作原理沒有問題。
當我將它寫入Xps文件時,標題被移位並且 輸出錯誤。 爲了將它寫入XPS,我創建了我的控件,然後填寫需要顯示的數據。保存控制時的問題Visual到Xps文件

我用這個職位:Convert WPF (XAML) Control to XPS Document 將控制輸出到Xps文件。

我試圖將HeaderRowTemplate設置爲固定大小,但沒有結果。

我也嘗試更新數據更新後的佈局,但沒有結果。

列和行是即時計算的,具體取決於哪些數據是非空的。

(RQ:垂直和水平特性是不一樣的)

這裏是如何看起來有一些數據的窗口中加載控制:

Right display, inside a window

而且還有的截圖從此控件生成的xps文件

ScreenShot of the xps generated

編輯:我終於找到這個問題的解決方法:ⅰ加入其中的控制被示哪位用戶像anyway-一個「打印預覽」窗口和I「打印」這個(正確的)窗口內容。

+0

你介意表現出一定的XAML? – Sevenate

回答

1

我與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   
} 
+0

Thx很多,我通過在「Preview」窗口中首先顯示控件來解決問題(實際上我只是這樣做了),然後導出正確的視覺。但你的解決方案似乎更清潔/一般情況。也許你可以複製你製作的MarkupExtension,這可能對別人有用? – GameAlchemist

+0

嗯,這很簡單,但我會將它添加到帖子;)謝謝。 – JanW