【XAML/VB.NET】XAMLファイルを帳票フォーマットとして使用する

公開日: : 最終更新日:2015/10/20 Blog, Microsoft , ,

掲題について。結論としてはFixedPageをルートとするXAMLファイルを
XamlReaderでロードしてFixedDocumentに表示させた。
フォーマット内のバインド部分も動く。

<FixedPage xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
           xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
           xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
           xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
           mc:Ignorable="d" Margin="10"
           d:DesignHeight="1056" d:DesignWidth="816"
           DataContext="{Binding ViewerData}">
    <Grid Height="1036" Width="796" Margin="10">
        <Grid.RowDefinitions>
            <!-- …省略… -->
        </Grid.RowDefinitions>
        <!-- 固定部分 -->
        <Grid Grid.Row="0">
            <Border BorderBrush="Black"
                    BorderThickness="1"
                    Margin="5"
                    Padding="10"
                    CornerRadius="5">
                <TextBlock TextAlignment="Center" Text="帳票タイトル" />
            </Border>
        </Grid>
        <!-- 可変部分 -->
        <Grid Grid.Row="1">
            <Grid.ColumnDefinitions>
                <!-- …省略… -->
            </Grid.ColumnDefinitions>
            <TextBlock Grid.Column="0" Text="バインドパラメータ" />
            <TextBlock Grid.Column="1" Text="{Binding Param1}" />
            <TextBlock Grid.Column="2" Text="{Binding Param2}" />
            <TextBlock Grid.Column="3" Text="{Binding Param3}" />
        </Grid>
    </Grid>
</FixedPage>

読み込みロジック

Private Shared Function PrintTemplate(path As String) As Object

    Dim reader As XmlReader = XmlReader.Create(path)
    Dim fixedPage As FixedPage = DirectCast(XamlReader.Load(reader), FixedPage)

    Dim content As New PageContent
    content.Child = fixedPage
    Dim fixedDocument As New FixedDocument()

    'A4指定
    fixedDocument.DocumentPaginator.PageSize = New Size(96 * 8.5, 96 * 11)
    fixedDocument.Pages.Add(content)

    Return fixedDocument
End Function

メイン画面

<Window>
    <!-- …省略… -->
    <DocumentViewer Grid.Row="1" Zoom="80">
        <!-- ここにPrintTemplateで取得したオブジェクトを設定 -->
    </DocumentViewer>
<Window>

【オマケ】
DocumentViewerのスタイル変更をしたい場合。以下が参考になった。
私の場合はヘッダのボタンを必要最小限にし、フッタの検索バーを消したかった。

http://msdn.microsoft.com/ja-jp/library/vstudio/aa970452(v=vs.100).aspx

関連記事

Minnow Board Turbot + Windows 10 IoT Core をSSD上で動作させる

MinnowBoard は SATAが搭載されているので、SSDなどが利用できる。 通常はSDカード

記事を読む

WordPressでスパムコメント対策

WordPressのスパムコメント対策を行ったのでメモ。 標準でAkismetがインストール済み(

記事を読む

no image

macOSのVSTSビルドエージェント構築過程で、type initializeで例外が発生し接続に失敗する問題の対応

macOS Sierra (10.12.4) Deploy an agent on OSX Xa

記事を読む

no image

【解決】Visual Studio 2015 Update1 の Xamarin.Forms でインテリセンスを使いたい

前回保留になっていた問題が解決したのでメモっときます。 Visual Studio 2015 Up

記事を読む

no image

【C#,WinForms】XMLデータをListViewに表示し、チェック項目のみXML保存させる

MSDNフォーラムの以下についてサンプルを組んだので掲載。 ListViewでチェックされた値

記事を読む

no image

【.NET】イベントのサブスクライブとサブスクライブ解除

.NETでイベントをハンドルする方法 サブスクライブ void CustomEven

記事を読む

Xamarin.Forms + Visual Studio Team Services ビルドタスクで自動バージョンアップ

Visual Studio Team Services で Xamarin.Forms の継続的デリ

記事を読む

UWPをHockeyApp対応させる

走り書きメモ。 UWPをHockeyApp対応させるためにはNuGetパッケージを使ってモジュール

記事を読む

no image

SmallBasicで拡張ライブラリを使用する

こんにちは。 teratailにて以下の質問に遭遇しまして。 small basic の 拡

記事を読む

VisualStudio2015でiOSアプリケーション開発

こんにちは。 Windows10にアップグレードしました。 VisualStudioも201

記事を読む

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

PAGE TOP ↑