2013-06-19 7 views
-1

DataGrid 내의 일부 데이터를 표시하는 컨트롤을 만들었습니다.
창 내에서 사용하면 문제없이 작동합니다.
XPS 파일에 쓸 때 헤더가 이동하고 출력이 잘못되었습니다. XPS에 기록하려면 컨트롤을 만든 다음 표시해야하는 데이터를 채 웁니다.Visual을 Xps 파일에 저장할 때 문제가 발생했습니다.

이 게시물을 사용하여 : Convert WPF (XAML) Control to XPS Document 컨트롤을 Xps 파일로 출력합니다.

결과없이 고정 크기로 HeaderRowTemplate을 갖기 위해 노력했습니다.

또한 결과가없는 데이터 업데이트 이후 레이아웃을 업데이트하려고했습니다.

열과 행은 null이 아닌 데이터에 따라 즉석에서 계산됩니다.

Right display, inside a window

을 그리고 의 스크린 샷이있다 :

여기

방법 창로드 일부 데이터와 컨트롤을 보이는 것 (Rq가 수직 및 수평 특성은 동일하지 않습니다) xps 파일이 컨트롤에서 생성되었습니다.

ScreenShot of the xps generated

편집 : 내가 컨트롤이 어쨌든 - 같은 - 어떤 사용자가 표시되어있는 '인쇄 미리보기'창을 추가하고 난이 (올바른) 창을 '인쇄': 나는 마침내이 문제에 대한 해결 방법을 발견 함유량.

+0

에 대한 가능한 구현은? – 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).

편집 : 이것은 당신이 어떤 XAML을 보여 마음겠습니까 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 많은데, 먼저 '미리보기'창에 컨트롤을 표시하여 문제를 해결 한 다음 (실제로이 작업 만 수행했습니다) 올바른 시각적 효과를 내 보냅니다. 그러나 당신의 솔루션은 훨씬 더 깨끗하고 일반적인 것으로 보인다. 아마 당신이 만든 MarkupExtension을 복사 할 수 있습니다. 다른 사람들에게 유용 할 수 있습니다. – GameAlchemist

+0

음, 꽤 똑바로지만 나는 그것을 게시물에 추가됩니다;) 감사합니다. – JanW

관련 문제