【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

関連記事

no image

Azure へ WordPress 環境を作成

よくあるやつだけど。 社内LT用

記事を読む

no image

RPi3 OmxPlayer / VLC Player 連続再生2回目から映像が乱れる問題

Raspberry Pi 3 Model の Ubuntu や Raspbian で OmxPlay

記事を読む

Xamarin iOS, Android での位置情報、Bluetoothの有効化メモ

OSが勝手に出してくれたりくれなかったりのところを整理するためのメモ 諸事情によりサンプルはXama

記事を読む

WordPressでスパムコメント対策

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

記事を読む

no image

UWPのScrollViewerでスクロール位置の同期を行うメモ

複数のScrollViewerのスクロール位置を同期したい場合、WPFではScrollChanged

記事を読む

no image

【ストアアプリ】資格情報の保存と読み込み

こんにちは。 Windowsストアアプリで資格情報をセキュアに保存する方法について。

記事を読む

no image

【UWP】矢印キーでのフォーカス移動

FocusManagerで上下左右のフォーカス遷移が出来るので、その仕組みを利用してやるビヘイビアを

記事を読む

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

Xamarinを触り始めました。 チュートリアルということで、Xamarin.Forms Quick

記事を読む

【iPhoneアプリ】開発者登録手順(iOS Developer Program) その1

iPhoneアプリの作成からリリースまでの一通りの流れを体験したかったため、 簡単なiPhon

記事を読む

Xamarin.FormsのTabbedPageでバッジを表示する

iOSのタブバーはNative側でバッジ機能があるのだが、Androidにはそもそもバッジが無いらし

記事を読む

Message

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

PAGE TOP ↑