4

センサーからデータをフェッチし、そのデータからグラフとデータグリッドを出力するアプリケーションがあります。

何がうまくいったか:DocumentViewerの助けを借りてFixedDocumentに表示されたfixedPageに挿入されたユーザーコントロールを使用してレポートを生成していました。

次に行ったこと:テキスト検索を有効にし、レポートを事前に生成するなど、多くのことを容易にするために、FixedDocument を XpsDocument に変換し、これを DocumentViewer に入れることにしました。

私の問題: 何らかの理由で、DataGrid 列を除いて、変換によってすべてが変更されませんでした。列を Xaml に手動で挿入していますが、それぞれの幅は 1* です。しかし、私が得ている結果は、サイズ変更を完全に無視しているかのようです。コンテンツに合わせて適切にサイズ変更されていません。

それを修正するもの:幅を固定すると、ビューアで尊重されます。

コード:

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>

XAML :

<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>
4

0 に答える 0