Wpf 打印时DataGrid列未调整大小
我有一个从传感器获取数据的应用程序,然后从该数据输出图形和数据网格 什么有效: 我正在生成一个带有usercontrol的报告,该报告插入到一个fixedPage中,在DocumentViewer的帮助下显示在FixedDocument中 我当时所做的: 为了简化很多事情,比如启用文本搜索、预生成报告等等,我决定将我的FixedDocument转换为XpsDocument,并将其放入DocumentViewer 我的问题: 出于某种原因,除了我的DataGrid列之外,所有内容都通过转换保持不变。我正在用Xaml手动插入我的列,每个列的宽度为1*。但我得到的结果是,它似乎完全忽略了调整大小。它甚至不能根据内容正确调整大小 什么修复了它:当我放置一个固定的宽度时,它在查看器中受到尊重 代码:Wpf 打印时DataGrid列未调整大小,wpf,xaml,datagrid,datagridcolumn,Wpf,Xaml,Datagrid,Datagridcolumn,我有一个从传感器获取数据的应用程序,然后从该数据输出图形和数据网格 什么有效: 我正在生成一个带有usercontrol的报告,该报告插入到一个fixedPage中,在DocumentViewer的帮助下显示在FixedDocument中 我当时所做的: 为了简化很多事情,比如启用文本搜索、预生成报告等等,我决定将我的FixedDocument转换为XpsDocument,并将其放入DocumentViewer 我的问题: 出于某种原因,除了我的DataGrid列之外,所有内容都通过转换保持不变
var actualReport = new FixedDocument();
actualReport.DocumentPaginator.PageSize = new Size(8.5 * 96, 11 * 96);
actualReport.Pages.Add(new PageContent { Child = new FixedPage { Children = {
new FrontPage { Width = 8.5 * 96, Height = 11 * 96, DataContext = d, }
}
}
});
[.. Three more pages ..]
var ms = new MemoryStream();
var pkg = Package.Open(ms, FileMode.Create, FileAccess.ReadWrite);
string pack = "pack://temp.xps";
PackageStore.AddPackage(new Uri(pack), pkg);
var doc = new XpsDocument(pkg, CompressionOption.SuperFast, pack);
XpsSerializationManager rsm =
new XpsSerializationManager(new XpsPackagingPolicy(doc), false);
rsm.SaveAsXaml(actualReport.DocumentPaginator);
Viewer.Document = doc.GetFixedDocumentSequence();
风格:
<Style TargetType="DataGrid" x:Key="PrintGrid">
<Setter Property="IsReadOnly" Value="True" />
<Setter Property="BorderBrush" Value="{x:Null}" />
<Setter Property="Background" Value="{x:Null}" />
<Setter Property="AutoGenerateColumns" Value="False" />
<Setter Property="CanUserSortColumns" Value="False" />
<Setter Property="CanUserResizeColumns" Value="False" />
<Setter Property="CanUserResizeRows" Value="False" />
<Setter Property="CanUserReorderColumns" Value="False" />
<Setter Property="HeadersVisibility" Value="Column" />
<Setter Property="FontSize" Value="16" />
</Style>
<DataGrid Grid.Row="1" ItemsSource="{Binding CollectCtx.Sensors}"
Style="{DynamicResource PrintGrid}" HorizontalAlignment="Stretch">
<DataGrid.Columns>
<DataGridTextColumn Header="Pos" Width="1*" Binding="{Binding Position}" />
<DataGridTextColumn Header="Min" Width="1*"Binding="{Binding Data.Min, StringFormat={x:Static r:Resources.FormatTemp}}" />
<DataGridTextColumn Header="Ave" Width="1*" Binding="{Binding Data.Ave, StringFormat={x:Static r:Resources.FormatTemp}}" />
<DataGridTextColumn Header="Max" Width="1*" Binding="{Binding Data.Max, StringFormat={x:Static r:Resources.FormatTemp}}" />
<DataGridTextColumn Header="Stab" Width="1*" Binding="{Binding Data.Stab, StringFormat={x:Static r:Resources.FormatTemp}}" />
<DataGridTextColumn Header="Diff" Width="1*" >
<DataGridTextColumn.Binding>
<MultiBinding StringFormat="{x:Static r:Resources.FormatTemp}" Converter="{StaticResource DiffConverter}">
<Binding Path="Data.Ave" />
<Binding
RelativeSource="{RelativeSource AncestorType={x:Type UserControl}}"
Path="DataContext.CollectCtx.Temperature" />
</MultiBinding>
</DataGridTextColumn.Binding>
</DataGridTextColumn>
<DataGridTextColumn Header="Compliant" Width="1*" Binding="{Binding DataContext.CollectCtx, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}, Converter={StaticResource CompliantConverter}, Mode=OneWay}" />
</DataGrid.Columns>
</DataGrid>
Xaml:
<Style TargetType="DataGrid" x:Key="PrintGrid">
<Setter Property="IsReadOnly" Value="True" />
<Setter Property="BorderBrush" Value="{x:Null}" />
<Setter Property="Background" Value="{x:Null}" />
<Setter Property="AutoGenerateColumns" Value="False" />
<Setter Property="CanUserSortColumns" Value="False" />
<Setter Property="CanUserResizeColumns" Value="False" />
<Setter Property="CanUserResizeRows" Value="False" />
<Setter Property="CanUserReorderColumns" Value="False" />
<Setter Property="HeadersVisibility" Value="Column" />
<Setter Property="FontSize" Value="16" />
</Style>
<DataGrid Grid.Row="1" ItemsSource="{Binding CollectCtx.Sensors}"
Style="{DynamicResource PrintGrid}" HorizontalAlignment="Stretch">
<DataGrid.Columns>
<DataGridTextColumn Header="Pos" Width="1*" Binding="{Binding Position}" />
<DataGridTextColumn Header="Min" Width="1*"Binding="{Binding Data.Min, StringFormat={x:Static r:Resources.FormatTemp}}" />
<DataGridTextColumn Header="Ave" Width="1*" Binding="{Binding Data.Ave, StringFormat={x:Static r:Resources.FormatTemp}}" />
<DataGridTextColumn Header="Max" Width="1*" Binding="{Binding Data.Max, StringFormat={x:Static r:Resources.FormatTemp}}" />
<DataGridTextColumn Header="Stab" Width="1*" Binding="{Binding Data.Stab, StringFormat={x:Static r:Resources.FormatTemp}}" />
<DataGridTextColumn Header="Diff" Width="1*" >
<DataGridTextColumn.Binding>
<MultiBinding StringFormat="{x:Static r:Resources.FormatTemp}" Converter="{StaticResource DiffConverter}">
<Binding Path="Data.Ave" />
<Binding
RelativeSource="{RelativeSource AncestorType={x:Type UserControl}}"
Path="DataContext.CollectCtx.Temperature" />
</MultiBinding>
</DataGridTextColumn.Binding>
</DataGridTextColumn>
<DataGridTextColumn Header="Compliant" Width="1*" Binding="{Binding DataContext.CollectCtx, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}, Converter={StaticResource CompliantConverter}, Mode=OneWay}" />
</DataGrid.Columns>
</DataGrid>
我也遇到了同样的问题。你找到解决办法了吗?@Balls of steel有更新吗?