0

我正在使用 Lightswitch 编写 Silverlight 应用程序。我想打印某些屏幕上显示的数据。

我找到了这个在 Silverlight/Lightswitch 中打印的教程。它描述了如何使用可以打印的 XAML 创建自定义控件。控件如下所示:

在 Lightswitch 中打印

在后台,您可以看到控件在 Silverlight 应用程序中的外观。该控件同时包含一个按钮和一个网格:

<StackPanel>
    <Button Content="Print" Name="btnPrint" Click="btnPrint_Click" />
        <Grid x:Name="LayoutRoot">
            <!-- grid code goes here -->
            <!-- some more code an closing tags -->

使用 Silverlight 的打印 API,在自定义控件中打印是这样完成的:

PrintDocument printInvoice = new PrintDocument();
private void btnPrint_Click(object sender, System.Windows.RoutedEventArgs e){   
    printInvoice.PrintPage +=
        new EventHandler<PrintPageEventArgs>(printInvoice_PrintPage);
}

void printInvoice_PrintPage(object sender, PrintPageEventArgs e){
    e.PageVisual = LayoutRoot;
}

由于e.PageVisual = LayoutRoot使用了,我们只看到打印输出中的表格,而不是按钮。没关系,但我想为打印布局使用单独的 XAML。我的目标是仅Print在 Silverlight 应用程序上显示一个按钮,并在单独的 XAML 中定义打印布局。

因此,我刚刚开始创建第二个 XAML 作为 SilverlightControl 并尝试使用它:

MyPrintLayout mpl = new MyPrintLayout();
void printArtikels_PrintPage(object sender, PrintPageEventArgs e){
    e.PageVisual = mpl.LayoutRoot;
}

但我收到错误“Das Element ist bereits das untergeordnete Element eines anderen Elements”(英文:“该元素已经是另一个元素的子元素”)。这个问题也在这个问题中讨论过,但它并没有解决我的问题。

当我包含MyPrintLayout在 silverlight 应用程序中时,它显示没有问题(其中只有一些文本来测试功能)。

好像我这样做完全错误。我怎样才能实现我的目标?

4

1 回答 1

3

mpl.LayoutRoot 已经是 mpl 的子元素。试试这个:

void printArtikels_PrintPage(object sender, PrintPageEventArgs e){
    MyPrintLayout mpl = new MyPrintLayout();
    e.PageVisual = mpl;
}
于 2013-01-29T13:05:39.683 回答