質問
請求書の印刷をするために
xamlで定義したレイアウトの帳票を出力したいと考えております。
WPF/XAMLで帳票のデザイン・印刷を行う
を参考にして作成しました。
下記ソースコードにて帳票を作成してみると
左上の隅に
「Domain.Report.BillingPageViewModel」
と表示されていて、
BillingPage.xamlで定義した内容が表示されません。
どう修正したらよいのか
教えていただけますようよろしくお願いいたします。
BillingPage.xaml
C#
1<Window x:Class="Domain.Report.BillingPage" 2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 4 xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 5 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 6 xmlns:local="clr-namespace:Domain.Report" 7 mc:Ignorable="d" 8 Title="BillingPage" Height="450" Width="800"> 9 <Window.Resources> 10 <DataTemplate DataType="{x:Type local:BillingPageViewModel}"> 11 <Grid Margin="30"> 12 <StackPanel> 13 <TextBlock HorizontalAlignment="Center" FontSize="30" Text="ハローワールド" /> 14 <TextBlock HorizontalAlignment="Right" Text="2007/08/31" /> 15 <TextBlock Text="Hello, world!" /> 16 </StackPanel> 17 </Grid> 18 </DataTemplate> 19 </Window.Resources> 20</Window>
BillingPageViewModel.cs
C#
1namespace Domain.Report 2{ 3 public sealed class BillingPageViewModel 4 { 5 } 6}
BillingReport.cs
C#
1namespace Domain.Report 2{ 3 public sealed class BillingReport : IPaginatable 4 { 5 IReadOnlyList<object> Pages { get; } = 6 new object[] 7 { 8 new BillingPageViewModel(), 9 }; 10 11 public IReadOnlyList<object> Paginate(Size pageSize) 12 { 13 return Pages; 14 } 15 } 16}
IPaginatable.cs
C#
1namespace Domain.Report 2{ 3 public interface IPaginatable 4 { 5 IReadOnlyList<object> Paginate(Size pageSize); 6 } 7}
PaginatableExtension.cs
C#
1namespace Domain.Report 2{ 3 public static class PaginatableExtension 4 { 5 public static FixedDocument ToFixedDocument(this IPaginatable paginatable, Size pageSize) 6 { 7 var document = new FixedDocument(); 8 9 foreach (var content in paginatable.Paginate(pageSize)) 10 { 11 var presenter = 12 new ContentPresenter() 13 { 14 Content = content, 15 Width = pageSize.Width, 16 Height = pageSize.Height, 17 }; 18 19 var page = 20 new FixedPage() 21 { 22 Width = pageSize.Width, 23 Height = pageSize.Height, 24 }; 25 page.Children.Add(presenter); 26 27 page.Measure(pageSize); 28 page.Arrange(new Rect(new Point(0, 0), pageSize)); 29 page.UpdateLayout(); 30 31 var pageContent = new PageContent() { Child = page }; 32 document.Pages.Add(pageContent); 33 } 34 35 return document; 36 } 37 } 38}
印刷ボタン
C#
1 /// <summary> 2 /// 帳票印刷 3 /// </summary> 4 public DelegateCommand PrintButton { get; } 5 private void PrintButtonExecute() 6 { 7 PrintDialog printDialog = new PrintDialog(); 8 bool? result = printDialog.ShowDialog(); 9 if (!result.HasValue || !result.Value) return; 10 11 var queue = printDialog.PrintQueue; 12 var writer = PrintQueue.CreateXpsDocumentWriter(queue); 13 14 FixedDocument document = new BillingReport().ToFixedDocument(new Size(793.70, 1122.52)); 15 writer.Write(document); 16 }
回答2件
あなたの回答
tips
プレビュー