保存到Xps时,DataGrid / GridView损坏了列

时间:2014-09-11 09:16:29

标签: c# wpf xaml gridview xps

我有一个表需要保存为xps(或pdf)文件。为此,我有一个自定义控件,它有一个标题和表本身,这是它在UI中的样子: http://i.stack.imgur.com/kfGlJ.png(抱歉,我不允许发布图片:))  所以我只是创建一个这个控件的实例,传递一个datacontext,测量,重新排列它并将其作为视觉写入XpsDocument,它应该就这么简单。但是,在结果xps文件中它看起来不同,列的宽度不正确: http://i.stack.imgur.com/vgpcz.png 我还尝试了一个带有GridView的ListView - 同样的故事,列缩小了。 以下是我编写xps文件的方法:

            var xpsFileName = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "Details.xps");
        using (var pack = Package.Open(xpsFileName))
        {
            using (var doc = new XpsDocument(pack))
            {
                var dataContext = SeiteDataContextBekommen(0);
                var visual = BerichtViewErstellen();
                visual.DataContext = dataContext;
                visual.Measure(PageSize);
                visual.Arrange(new Rect(0, 0, PageSize.Width, PageSize.Height));
                visual.UpdateLayout();
                var writer = XpsDocument.CreateXpsDocumentWriter(doc);
                writer.Write(visual);
            }
        }

这是DataGrid的Xaml,虽然没有太多东西可以看到:

<DataGrid Grid.Row="2" ItemsSource="{Binding MitarbeiterBestellungen}" 
              CellStyle="{StaticResource ZelleStyle}"
              AlternatingRowBackground="WhiteSmoke" 
              AutoGenerateColumns="False" 
              Background="Transparent" 
              FontSize="12"
              GridLinesVisibility="None">
        <DataGrid.Columns>
            <DataGridTextColumn Header="Angebeort" Binding="{Binding Standort}" CellStyle="{StaticResource ZentriertZelleStyle}"/>
            <DataGridTextColumn Header="ID" Binding="{Binding MitarbeiterID}"/>
            <DataGridTextColumn Header="Mitarbeiter" Width="*" Binding="{Binding Mitarbeitername}"/>
            <DataGridTextColumn Header="Menge" Binding="{Binding Menge}" CellStyle="{StaticResource ZentriertZelleStyle}"/>
            <DataGridTextColumn Header="Bezeichnung" Width="2*" Binding="{Binding Bezeichnung}"/>
            <DataGridTextColumn Header="Preis" Binding="{Binding Preis, StringFormat=\{0:C\}}"/>
            <DataGridTextColumn Header="OK" Width="64" CellStyle="{StaticResource OkZelleStyle}"/>
        </DataGrid.Columns>
    </DataGrid>

我也尝试创建一个paginator并用DocumentPage包装我的UserControl,我尝试使用VisualsCollat​​or for Xps writer,但结果总是一样的。看起来我在这里遗漏了一些非常简单的东西,如果你能帮我找到它,我将不胜感激。

顺便说一句,我必须保存控件而不显示它,因为它应该由Windows服务稍后完成。

P.S。问题是我在某些列中使用* width。我用固定尺寸替换它们,现在可以正确显示。有没有办法让它与* s一起使用?

0 个答案:

没有答案